Проблема не совсем в том, что написано в вопросе, приложение потребляет всего 24 мб оперативки, но "забивает" всю оперативку "памятью в ожидании", которая не очищается даже после завершения работы приложения, помогает только memreduct или перезагрузка. Само по себе это не страшно, эта память по мере надобности затирается другими приложениями, но такое поведение мне не нравится, с этим что то можно сделать?
Приложение читает много данных (over 50Гб) с диска порциями по 500кб, после обработки порции ее переписывает снова и снова. Думаю проблема в GC, потому как после "заполнения" всей оперативки этим мусором команда GC.Collect() вылетает с ошибкой.
Там находятся кешированные данные, которые теоретически могут быть использованы заново. На просторах интернета нашлись упоминания о программе под названием RamMap. Она поможет определить ресурсы, загаживающие память. Кстати GC тут не причем, конечно если у вас код чтения не кривой и все высвобождается корректно. За кешированные в памяти данные ведь отвечает ОС, а не GC.
это то понятно, у приложения с памятью проблем нет, но вот наличие такого Кэша смущает ибо ничего из того что в нем оказалось повторно использоваться не будет
ну так вы же читаете 50 гигов данных, предполагаю что из файла. В тех же интернетах был пример, когда делался бекап базы размером в ~4 ГБ и все это добро потом лежало в этом кеше, хотя после завершения создания бекапа эти данные больше не нужны.
Виталий Пухов я думаю тут логика такая: файл большой и его тянуть повторно в оперативку скажем так долго, а вот выкинуть его оттуда можно в любой момент, это ж кеш и при большой нужде его и очистить можно, вот ОС и думает "придержу-ка я его в оперативке, может понадобится скоро". Я уже говорил про утилиту RamMap. Ради интереса можете посмотреть что у вас там валяется)
P.S. У меня в данный момент нет свободной оперативки, 13 гб из 16-и скушали программы, а остальное кешем съедено, и ничего, все работает.
Не обязательно именно GC, но он едиственный кто следит за отходами производства у приложения.
К тому же если бы были обработчики или циклические ссылки, тогда "мусор" остался бы в памяти приложения, а не в памяти ОС. Приложение не больше 40 мб занимает включая виртуальную память, даже после "прокачки" через себя 50 гб данных с диска. А вот ОС у себя этот "кэш" зачем то хранит, ни на что вобщем не влияет, но так по идее быть не должно.