Очистка больших объектов из памяти IIS

У меня есть приложение, которое хранит DataTables в кеше памяти (AppFabric). Эти DataTables могут быть довольно большими. Когда в нашем приложении (на MVC-сайте) много трафика, использование памяти IIS очень быстро проходит через крышу.

В идеале мы хотим освободить память, которую эти DataTables потребляют после запроса из кэша.

Код контроллера - это что-то вроде

Using (DataTable dt = DataTable)
{
 DataTable dt = Cache.GetObject(objectID);

 //perform some manipulation on Data table
 DataTable dtSmaller = dt.Select("Select top 1...");

 dt.Dispose();
} 
 //return from controller
return dtSmaller;

Как только этот контроллер попадает много раз, процесс W3WP.exe использует массу памяти до тех пор, пока в конечном итоге не выйдет из памяти. Что происходит, так это то, что DataTable поступает из кэша, он запрашивает, чтобы уменьшить размер выходных данных. Затем я располагаю исходный DataTable.

Я искал способ освобождения памяти, потребляемой DataTable, в зависимости от коллекции мусора IIS

1 ответ

Вы можете принудительно GC.GetTotalMemory(true) полный цикл сбора мусора, вызвав GC.GetTotalMemory(true)

Дополнительная информация о методе: GC.GetTotalMemory

licensed under cc by-sa 3.0 with attribution.