我需要在短时间内处理许多位图,我使用线程来执行。现在,我记得要处理所有这些,我没有内存泄漏。通常,我的应用程序会打开几个线程(我控制它们的数量 - 现在我同时只执行 4 个),并且每个线程都处理一个大位图并进行一些额外的图形处理。
一切正常,直到我处理让我说 - 最多连续 100 个位图。我的应用程序使用 opendialog,所以我打开 100 个第一个位图,然后我的应用程序会自动处理它们。完成后,我打开下一批 100 个位图,依此类推(所以在这些批次之间有一个明显的停顿)。这工作正常。该应用程序一直处于打开状态。我没有看到内存泄漏,在处理完最后一批后它保持稳定,我可以处理更多。
当我在一个批次中选择更多位图时出现问题 - 超过 300 个,因此我的应用程序处理所有这些位图时没有一秒钟的暂停。接近尾声时,我收到 GDI+ Out of Memory 错误,我的应用程序因消耗 1.7 GB 内存而挂起。
我的猜测是系统无法在这么短的时间内释放内存(而且我的应用程序正在保留更多)。是否可以?如何处理?我不想只是在过程中添加一个愚蠢的延迟。我想管理它。
更新:原因很简单,该应用程序被错误地编译为 32 位,因此只有 ~2GB 可用内存。虽然 GC 需要时间来释放内存,而应用程序仍在为更多位图保留更多内存,但应用程序达到了限制并挂起。
我将应用程序编译为 64 位,它可以完美运行。此外,我将控制内存使用,因此它不像现在这样无人看管。感谢所有提示和有趣的改进点!