powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Out of memory. Grid
6 сообщений из 6, страница 1 из 1
Out of memory. Grid
    #39477998
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наблюдаю интересное кино.

Имеем стандартный DataGrid, отображающий данные из DataTable dt.

dt формируем динамически (dt.Add(new DataRow(...)), подгружая туда руками данные из СУБД (грубо говоря сводная таблица).

Загружаем туда 1 набор данных (3 колонки) - работает, 2 набора - работает, ..., 19 - работает. Стабильное потребление памяти ~120 Мб, но видно бросок в диспетчере задач.

Пытаемся загрузить сразу же после запуска программы те же 19 наборов - вылетает Out of Memory (32-бит, примерно на 2Гб пике). Причем не в процедуре загрузки данных, а в отрисовке - примерно такой же стектрейс.

Трассировка показала, что моя процедура загрузки данных отработала без проблем.
Закончили на grid.ItemsSource = dt.DefaultView; и спокойно вышли.

Принудительно дополнительно выполнил все Датаридеры и прогон GC - ничего не поменялось
Код: c#
1.
2.
3.
4.
foreach(var dr in listReader)
        dr.Dispose();
    GC.Collect();
    GC.WaitForPendingFinalizers();



Итоговая табличка примерно 1400 строк х57 столбцов.

.NET4 VS2010SP1

Вопрос - что за бросок потребления памяти при отрисовке грида ?

Стектрейс как я посмотрю, весьма типичный в гугле.

Могу выложить полный стектрейс и почиканный код - но там как то все без заморочек.
...
Рейтинг: 0 / 0
Out of memory. Grid
    #39477999
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочка. Стектрейс не точно такой - вылетает System.Windows.Controls.TextBlock.EnsureTextBlockCache()

Но цепочка вызовов практически такая же.
...
Рейтинг: 0 / 0
Out of memory. Grid
    #39478003
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Завтра проверю эту проблему с авторасчетом высоты
https://stackoverflow.com/questions/24194022/huge-memory-increase-when-using-auto-layout-in-wpf-grid
...
Рейтинг: 0 / 0
Out of memory. Grid
    #39478068
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Включите горизонтальную виртуализацию, в DataGrid она поддерживается
так же, возможно проблема в представлении у DataTable.
Код: c#
1.
2.
var a = new DataTable();
var v = new BindingListCollectionView(a.DefaultView);

попробуйте выполнить подобный код
примерно тоже самое выполняется, когда изменяется свойство ItemsSource

Так же возможна проблема в Placeholder'е для нового элемента.

У меня была задача сделать как таблицу 100 на 100, датагрид спокойно её жрал, но я не использовал DataTable, но так как ячейки были достаточно маленькие и детализированные, пришлось содержимое ячеек простыми Visual объектами. Но при любом раскладе всё работало
...
Рейтинг: 0 / 0
Out of memory. Grid
    #39478491
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

Зафиксировал высоту строки, включил виртуализацию и стоблцов тоже. Помогло - вылетать перестало, но бросок все равно есть, видимо меньше.
Замена на BindingListCollectionView видимого результата не дала.

Мне пока достаточно, потому что реальный размер таблицы раз в 5 меньше. Это был стресс-тест.
...
Рейтинг: 0 / 0
Out of memory. Grid
    #39478502
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

я не предлагал заменять на BindingListCollectionView, а проверить, что будет, если на основе вашего DataTable'а создать представление, оно так и так создается с вашей помощью или без вашей :) внутри DataGrid
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Out of memory. Grid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]