Внутри сложного многопоточного приложения я получаю исключения нехватки памяти, возможно, раз в неделю. Приложение отправляет / читает огромные объемы данных через несколько сокетов, где считанные данные кэшируются, чтобы избежать переполнения буфера сетевой карты.
Какова лучшая стратегия анализа исключений памяти? Во время нормальной работы приложение отображается с размером «Всего байтов во всех кучах» до 1,5 гигабайт в проводнике процессов.
Может ли быть стратегия иметь поток, который опрашивает
GC.GetTotalMemory ()
или
PrivateMemorySize64 ()
раз в секунду, чтобы знать, когда начинать анализировать вещи? Я еще не изучал коммерческие профилировщики, и меня немного беспокоит их влияние на производительность, которое также может дать неверные результаты в отношении фактического анализа проблемы.