-1

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

C# 构造是

 GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce

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

我的 vb.net 代码是

    loadedImage.Dispose()
    MasterImage.Dispose()

    GC.Collect()
    Finalize()

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

完成后

你能帮我吗?

4

1 回答 1

0

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

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

于 2019-03-27T19:38:30.437 回答