如何释放 .NET 中 Bitmap 占用的内存?
How can I free the memory taken up by Bitmap in .NET?
我正在 .NET 上从事一些与图像相关的项目。
当我这样做时:
while(true)
{
Bitmap m = new Bitmap(100,100);
m.Dispose();
}
内存占用一直在上升。为什么 Dispose 没有释放 Bitmap 使用的所有内存,我怎样才能真正释放那块内存?
在我的实际工作案例中,我无法重用现有的位图,因为它可能每次运行时的大小都不同。
我也不能用 using 扭曲它,因为位图创建发生在方法内部,结果位图被返回以供进一步处理。
编辑:
奇怪的是,我尝试了这个完全相同的真实代码,但内存使用似乎停止快速增加。我只是无法重现这种情况(它一直在缓慢上升并且永远不会回落,至少在几分钟内)
感谢您的所有回答,我将选择我能选择的唯一答案作为解决方案。
你不能。 .NET Runtime 会在它“需要/想要”时为您完成。
如果您想“控制”分配的内存,您应该使用带有指针/不安全的非托管结构。
无论如何,如果您没有关于代码的任何性能问题,例如。内存不足 - 你应该保持原样 - 运行时将在方便的时候释放内存。
如果您想了解有关 GarbageCollector 以及如何在 .NET 中管理内存的更多信息,我可以向您推荐一本书 https://www.amazon.com/Pro-NET-Memory-Management-Performance/dp/148424026X
我正在 .NET 上从事一些与图像相关的项目。 当我这样做时:
while(true)
{
Bitmap m = new Bitmap(100,100);
m.Dispose();
}
内存占用一直在上升。为什么 Dispose 没有释放 Bitmap 使用的所有内存,我怎样才能真正释放那块内存?
在我的实际工作案例中,我无法重用现有的位图,因为它可能每次运行时的大小都不同。 我也不能用 using 扭曲它,因为位图创建发生在方法内部,结果位图被返回以供进一步处理。
编辑:
奇怪的是,我尝试了这个完全相同的真实代码,但内存使用似乎停止快速增加。我只是无法重现这种情况(它一直在缓慢上升并且永远不会回落,至少在几分钟内)
感谢您的所有回答,我将选择我能选择的唯一答案作为解决方案。
你不能。 .NET Runtime 会在它“需要/想要”时为您完成。
如果您想“控制”分配的内存,您应该使用带有指针/不安全的非托管结构。
无论如何,如果您没有关于代码的任何性能问题,例如。内存不足 - 你应该保持原样 - 运行时将在方便的时候释放内存。
如果您想了解有关 GarbageCollector 以及如何在 .NET 中管理内存的更多信息,我可以向您推荐一本书 https://www.amazon.com/Pro-NET-Memory-Management-Performance/dp/148424026X