Ух, там много сантехники и движущихся частей.
Можно ли немного сузить круг? То есть вы можете удалить материал со страницы и посмотреть, как он работает?
Простите, но когда вы говорите «утечка памяти», что вы имеете в виду и откуда вы знаете? GC 'ленивый' и не будет ничего делать, пока на него не будет оказано давление. Это хорошо, но это также означает, что память может накапливаться до тех пор, пока не понадобится коллекция, и тогда вы можете обнаружить, что она освобождает много. По этой причине профилировщики памяти часто выглядят как зуборезы.
Как вы храните данные сетки, чтобы заставить пейджинг работать? Я видел, что наборы данных сохранялись в viewstate, что означает, что данные отправляются клиенту вместе с сеткой. Если вы снова запрашиваете пост-обратную загрузку страницы, вы теряете там много места.
Еще одна распространенная проблема - подписка на события, позволяющая крупным объектам оставаться живыми дольше, чем они должны. Я действительно видел код, в котором сетка данных была помещена в состояние сеанса, которая поддерживала страницу в течение всего сеанса. На каждом пост-спине это происходило снова и снова до пуфа. В этом случае GC не может помочь нам, потому что объекты действительно все еще используются.
Поэтому попробуйте упростить - отключите сортировку, избавьтесь от стороннего контроля, используйте меньший набор данных и т. Д. Используя профилировщик памяти и что-то, что подвергает сервер нагрузке, измерьте этот сценарий. Если вы не обнаружили «утечек», то начните добавлять материал обратно, чтобы посмотреть, когда он выйдет из строя.