Управление LOH в vb.net - PullRequest
       64

Управление LOH в vb.net

0 голосов
/ 27 марта 2019

У меня есть приложение vb.net, которое я распространяю среди аналитиков - мы назначаем, возможно, 100 200 МБ изображений за раз.Приложение последовательно открывает большое изображение JPG с помощью GDI +, и изображение помещается в 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

Когда закончите

Вы можете помочь?

1 Ответ

0 голосов
/ 27 марта 2019

GCSettings.LargeObjectHeapCompactionMode был добавлен в .NET 4.5.1.Он существует как в VB.NET, так и в C #.Вы, вероятно, ориентируетесь на более низкую версию среды выполнения .NET.Если вы хотите получить доступ к этой функции, вам нужно будет выполнить компиляцию с версией фреймворка 4.5.1 или выше.

Однако, вероятно, это не решит основную проблему.Ваша утечка может даже не быть там, где вы думаете.Профилирование вашего приложения с помощью профилировщика распределения - лучший способ отследить утечку ресурсов.Без Минимального, Полного и Проверяемого примера трудно догадаться, где ваше приложение может работать неправильно.

...