Managing LOH in vb.net



我有一个 vb.net 应用程序分发给我的分析师 - 我们一次分配大约 100 个 200MB 的图像。应用使用 GDI+ 按顺序打开大型 jpg 图像,并将图像放置在 LOH 中。 我扫描每个像素以查找数据。- 完成后,我处理图像并使用GC.collect。但这不会清除 LOH,因此 LOH 会不断增加,直到应用程序崩溃。解决方法是将分配切成 25 个实例块,但这是有风险的,因为我们的分析师经常在深夜这样做——也许是在喝啤酒或 2 杯啤酒之后。

C# 构造为

 GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce

但是 vb.net 中没有可用的GCSettings

我的 vb.net 代码是

    loadedImage.Dispose()
    MasterImage.Dispose()
    GC.Collect()
    Finalize()

但是我找不到 vb.net 方法来强制 LOH 压缩

完成后

你能帮忙吗?

GCSettings.LargeObjectHeapCompactionMode是在

.NET 4.5.1中添加的。 它存在于 VB.NET 和 C# 中。 你可能面向较低版本的 .NET 运行时。 如果要访问此功能,则需要针对 4.5.1 或更高版本的框架版本进行编译。

但是,这可能无法解决根本问题。 您的泄漏甚至可能不是您认为的位置。 使用分配探查器分析应用程序是跟踪资源泄漏的最佳方法。 如果没有最小、完整且可验证的示例,则很难猜测您的应用程序可能出错的地方。

最新更新