System.OutOfMemoryException при привязке вида сетки к таблице данных, имеющей более 400000 записей - PullRequest
0 голосов
/ 28 сентября 2010

Уважаемый, я сталкиваюсь с исключением system.outofmemmory при связывании вида сетки с таблицей данных, имеющей более 400000 записей. Пожалуйста, найдите приведенный ниже пример кода для того же

GridView gv = new GridView();
this.EnableViewState = false;
gv.DataSource = (DataTable)dt;
gv.DataBind();

Пожалуйста, помогите мне преодолеть эту ситуациюЕсть ли какое-либо ограничение вида сетки для привязки данных?

Ответы [ 3 ]

2 голосов
/ 28 сентября 2010

Как уже предлагалось, разбиение на страницы является распространенным способом обработки большого количества записей в веб-приложениях.

Но если требуется показать все записи в выходных данных (например, для целей отчетности), то есть способ сделать это.

Вместо сохранения набора результатов в памяти на сервере вы также можете передавать данные клиенту. Этого можно достичь, используя DataReader вместо DataSet и отключив все механизмы кэширования.

Простой способ сделать это, например, использовать элемент управления SqlDataSource. Подключите источник данных к сетке, как обычно. Затем измените DataSourceMode в источнике данных с DataSet на DataReader. Отключите кэш вывода страницы, и вы готовы к работе.

2 голосов
/ 28 сентября 2010

Сетка данных ограничена доступной системной памятью, и вы, скорее всего, столкнетесь с этим. Предполагая, что адресное пространство процесса, скажем, 1,5 ГБ, это примерно 4 КБ на строку таблицы данных, если у вас было ничего , иначе потребляющего память в вашем процессе. 4 КБ не является необоснованным, если предположить дюжину или около того широких столбцов.

Вы пытаетесь отобразить слишком много строк одновременно. Я должен предположить, что это довольно плохой пользовательский опыт, пытаясь перемещаться по такому количеству строк. Взгляните на пейджинг их вместо

1 голос
/ 28 сентября 2010

Это много строк!Вы должны применить разбиение на страницы для того количества строк, которые будут управляемы.Если вы отображаете такое количество строк по той причине, что вам нужно найти определенные данные, вам также следует реализовать функцию поиска.

Вот руководство от MS по включению подкачки: http://msdn.microsoft.com/en-us/library/aa479347.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...