2014-09-02 4 views
0

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

+0

Вы несете ответственность за освобождение памяти, но сборщик мусора. Почему вы не используете базу данных? –

+0

Данные поступают от сторонних облачных веб-сервисов. – keitn

+0

Я до сих пор не понимаю, что потребляет столько памяти. Кажется, что ваш кеш содержит большой 'DataTable'. Но этот размер исправить и не должен быть проблемой. Так много ли меньших таблиц, вызывающих эту проблему памяти? Я не могу поверить, что. Что такое 'dt.Select (" Select top 1 ... ");' на самом деле делать, поскольку это недопустимый синтаксис? Вы можете использовать LINQ: 'dt.AsEnumerable(). Возьмите (10)', который не обязательно должен создавать новый 'DataRow []' всегда. Поэтому не возвращайте 'DataTable', но' IEnumerable '. –

ответ

0

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

Более подробной информации о методе: GC.GetTotalMemory

+0

Я думаю, что благодаря сочетанию принудительного GC и использованию WeakReferences я должен быть в состоянии добиться того, чего хочу. – keitn

Смежные вопросы