|
Out of memory. Grid
|
|||
---|---|---|---|
#18+
Наблюдаю интересное кино. Имеем стандартный 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.
Итоговая табличка примерно 1400 строк х57 столбцов. .NET4 VS2010SP1 Вопрос - что за бросок потребления памяти при отрисовке грида ? Стектрейс как я посмотрю, весьма типичный в гугле. Могу выложить полный стектрейс и почиканный код - но там как то все без заморочек. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2017, 20:51 |
|
Out of memory. Grid
|
|||
---|---|---|---|
#18+
Поправочка. Стектрейс не точно такой - вылетает System.Windows.Controls.TextBlock.EnsureTextBlockCache() Но цепочка вызовов практически такая же. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2017, 21:05 |
|
Out of memory. Grid
|
|||
---|---|---|---|
#18+
Завтра проверю эту проблему с авторасчетом высоты https://stackoverflow.com/questions/24194022/huge-memory-increase-when-using-auto-layout-in-wpf-grid ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2017, 21:17 |
|
Out of memory. Grid
|
|||
---|---|---|---|
#18+
Включите горизонтальную виртуализацию, в DataGrid она поддерживается так же, возможно проблема в представлении у DataTable. Код: c# 1. 2.
попробуйте выполнить подобный код примерно тоже самое выполняется, когда изменяется свойство ItemsSource Так же возможна проблема в Placeholder'е для нового элемента. У меня была задача сделать как таблицу 100 на 100, датагрид спокойно её жрал, но я не использовал DataTable, но так как ячейки были достаточно маленькие и детализированные, пришлось содержимое ячеек простыми Visual объектами. Но при любом раскладе всё работало ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2017, 01:03 |
|
Out of memory. Grid
|
|||
---|---|---|---|
#18+
Roman Mejtes, Зафиксировал высоту строки, включил виртуализацию и стоблцов тоже. Помогло - вылетать перестало, но бросок все равно есть, видимо меньше. Замена на BindingListCollectionView видимого результата не дала. Мне пока достаточно, потому что реальный размер таблицы раз в 5 меньше. Это был стресс-тест. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2017, 14:35 |
|
Out of memory. Grid
|
|||
---|---|---|---|
#18+
Siemargl, я не предлагал заменять на BindingListCollectionView, а проверить, что будет, если на основе вашего DataTable'а создать представление, оно так и так создается с вашей помощью или без вашей :) внутри DataGrid ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2017, 15:00 |
|
|
start [/forum/topic.php?fid=21&msg=39478068&tid=1440522]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
177ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 291ms |
0 / 0 |