垃圾回收-C#-GC友好指针空间打开

本文关键字:指针 空间 -C#-GC | 更新日期: 2023-09-27 17:59:14

假设我在BitmapImage对象中存储了一个大位图:

BitmapImage img = new BitmapImage();

无论出于什么原因,我都需要添加更多的指针:

BitmapImage p1 = img;
BitmapImage p2 = img;
BitmapImage p3 = img;

现在,如果我不再需要img,我会将其设置为空指针:

img = null;

这足以让GC正确地将其隔开吗?或者是否也有必要执行以下操作:

p1 = null;
p2 = null;
p3 = null;

垃圾回收-C#-GC友好指针空间打开

根据为进程分配的内存输出,只有当最后一个指针设置为null时,才会释放内存。我使用了一个大列表,因为空的BitmapImage在内存中非常小。

交互式C#:

> Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             var l = Enumerable.Repeat(123, 10000000).ToList();
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             System.GC.Collect();
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
140423168
270663680
207835136
>             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             System.GC.Collect();
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
207761408
207761408
> Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             var p1 = l;
207831040
> Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
207851520
> var p2 = l;
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             var p3 = l;
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
208273408
208273408
> Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             l = null;
.             System.GC.Collect();
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             p1 = null;
.             System.GC.Collect();
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             p2 = null;
.             System.GC.Collect();
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
.             p3 = null;
.             System.GC.Collect();
.             Console.WriteLine(Process.GetCurrentProcess().PrivateMemorySize64);
208314368
208314368
208314368
208314368
141033472