C# 如何完全删除PictureBox(释放内存)

C# 如何完全删除PictureBox(释放内存),c#,winforms,memory-management,picturebox,C#,Winforms,Memory Management,Picturebox,我正在尝试完全删除我的PictureBox,因为我不再需要它了。我尝试使用Dispose()方法,这将正确地从窗体中删除PBox,但不会从内存中删除。。。应用Dispose()后,我创建了一个PBox并在其中加载相同的图像,然后再次调用Dispose(),以此类推。。。我在“诊断工具/进程内存”窗口中看到的是每次按下按钮时内存使用量都会增加(这会创建新的PBox并将图像加载到其中),但内存从未释放。。。我还尝试使用Controls.Remove()方法,但得到了相同的结果 所以问题是:如何释放内

我正在尝试完全删除我的PictureBox,因为我不再需要它了。我尝试使用Dispose()方法,这将正确地从窗体中删除PBox,但不会从内存中删除。。。应用Dispose()后,我创建了一个PBox并在其中加载相同的图像,然后再次调用Dispose(),以此类推。。。我在“诊断工具/进程内存”窗口中看到的是每次按下按钮时内存使用量都会增加(这会创建新的PBox并将图像加载到其中),但内存从未释放。。。我还尝试使用Controls.Remove()方法,但得到了相同的结果

所以问题是:如何释放内存并完全删除PictureBox

编辑:
好啊过了一段时间,当程序使用了大约1Gb的内存(通过create-PBox/Dispose循环)时,垃圾收集器自动激活并释放了程序使用的几乎所有内存!我误解了这是怎么回事。。。我想每次使用Dispose方法后都应该运行它。。看起来一切正常,但在我应用Dispose后,有没有办法手动从内存中释放PBox?

通常,您应该调用
Dispose
并删除对PictureBox的所有引用。一段时间后,GC将收集此PictureBox并释放内存。但无法知道GC将在何时运行。因此,在GC运行之前,内存使用可能会增加一段时间-这是正常的。在大多数情况下,您不应该手动强制GC运行,但在某些特定情况下,您可以使用
GC.Collect()执行此操作(但它不是)

更新 您不能仅手动“收集/释放”指定对象。只强制GC(并获取上面链接提到的所有可能的问题)

更好的解决方案可能是重新编写代码,以避免重新创建ImageBox。你可以试试

  • 显示/隐藏单个ImageBox并仅替换其中的图像
  • 缓存ImageBox对象,并使用
    控件将其添加/删除到表单中。添加/控件。删除

由于加载/处理图像,您仍然会获得一些内存流量,但这可能比重新创建整个ImageBox要好

谢谢!我刚刚意识到完全一样的事情!:)无论如何,谢谢,我不会强制运行GC,我不需要它,但很高兴知道这个选项!实际上,这是一个简单的测试,用来模拟类似于绘画的程序的一些特性。在本例中,“新”功能。。当用户开始一个新的文件/图像,然后画一些东西,并点击“新”再次(新的大小),然后再画。。。与PS或油漆等相同。。。这就是为什么我想删除并创建新的PBox。。模拟“新建”按钮的行为。但此时我才意识到,我应该清除PBox上的图像,然后重新调整其大小并设置位置,而不是重新创建完整的PBox。。。嗯,谢谢!附带。没有代码很难给出建议-。