Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Out of memory. Grid / 6 сообщений из 6, страница 1 из 1
26.06.2017, 20:51
    #39477998
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Out of memory. Grid
Наблюдаю интересное кино.

Имеем стандартный 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
26.06.2017, 21:05
    #39477999
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Out of memory. Grid
Поправочка. Стектрейс не точно такой - вылетает System.Windows.Controls.TextBlock.EnsureTextBlockCache()

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

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

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

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

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

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

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


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