Столкнулся с проблемой. При задании числа строк в DataGridView в виртуальном режиме все строки реально создаются. Данные запрашиваются по мере необходимости, но строки-то физически уже существуют! Поэтому, Если у DataGridView задать очнь большое кольчество строк, например, 1000000000, то все упадет с ошибкой OutOfMemory.
И это называется виртуальный режим???
Подскажите, пожалуйста, может есть какая-нибудь хитрость...
Re: DataDridView vitrual mode очень много строк
От:
Аноним
Дата:
26.04.07 09:23
Оценка:
Здравствуйте, zenalex, Вы писали:
Z>Столкнулся с проблемой. При задании числа строк в DataGridView в виртуальном режиме все строки реально создаются. Данные запрашиваются по мере необходимости, но строки-то физически уже существуют! Поэтому, Если у DataGridView задать очнь большое кольчество строк, например, 1000000000, то все упадет с ошибкой OutOfMemory. Z>И это называется виртуальный режим??? Z>Подскажите, пожалуйста, может есть какая-нибудь хитрость...
интересно было бы увидеть воочию пользователя, внимательно пролистывающего миллиард строк...
Re[2]: DataDridView vitrual mode очень много строк
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, zenalex, Вы писали:
Z>>Столкнулся с проблемой. При задании числа строк в DataGridView в виртуальном режиме все строки реально создаются. Данные запрашиваются по мере необходимости, но строки-то физически уже существуют! Поэтому, Если у DataGridView задать очнь большое кольчество строк, например, 1000000000, то все упадет с ошибкой OutOfMemory. Z>>И это называется виртуальный режим??? Z>>Подскажите, пожалуйста, может есть какая-нибудь хитрость...
А>интересно было бы увидеть воочию пользователя, внимательно пролистывающего миллиард строк...
Спасибо за ценный ответ. В принципе, я не спрашивал зачем, я спросил почему. Т.е. я так понимаю, это косяк microsoft...
Re[3]: DataDridView vitrual mode очень много строк
zenalex wrote:
> Z>>Столкнулся с проблемой. При задании числа строк в DataGridView в > виртуальном режиме все строки реально создаются. Данные запрашиваются > по мере необходимости, но строки-то физически уже существуют! > Поэтому, Если у DataGridView задать очнь большое кольчество строк, > например, 1000000000, то все упадет с ошибкой OutOfMemory. Z>>И это > называется виртуальный режим??? Z>>Подскажите, пожалуйста, может есть > какая-нибудь хитрость... > > А>интересно было бы увидеть воочию пользователя, внимательно > пролистывающего миллиард строк... > > Спасибо за ценный ответ. В принципе, я не спрашивал зачем, я спросил > почему. Т.е. я так понимаю, это косяк microsoft...
Ты пробовал с 64-разрядным виндосом и с компом с 8 Гбайт памятью? Для каждой строки надо держать ссылку на строку. Если эта ссылка по 8 байтов, то тебе надо виртуальную памяит в 8 Гбайт.
Peter
Posted via RSDN NNTP Server 2.0
Re[3]: DataDridView vitrual mode очень много строк
Здравствуйте, zenalex, Вы писали:
Z>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, zenalex, Вы писали:
Z>>>Столкнулся с проблемой. При задании числа строк в DataGridView в виртуальном режиме все строки реально создаются. Данные запрашиваются по мере необходимости, но строки-то физически уже существуют! Поэтому, Если у DataGridView задать очнь большое кольчество строк, например, 1000000000, то все упадет с ошибкой OutOfMemory. Z>>>И это называется виртуальный режим??? Z>>>Подскажите, пожалуйста, может есть какая-нибудь хитрость...
А>>интересно было бы увидеть воочию пользователя, внимательно пролистывающего миллиард строк...
Z>Спасибо за ценный ответ. В принципе, я не спрашивал зачем, я спросил почему. Т.е. я так понимаю, это косяк microsoft...
Нет, это косяк реализации, подобной примеру из хэлпа.
dataGridView1.Rows.AddCopies(0, initialSize);
А всё таки, зачем???
можно сделать по другому (хотя тоже криво):
указать число строк например 100, при достижении юзером границы. верхней или нижней, переключать страницы (100, 200, 300 ... 1e9), и скрыть полосу прокрутки, чтобы не смущала, поставить вместо неё отдельный ScrollBar.
либо управлять смещением динамически, чтобы полоса прокрутки грида примерно соответствовала позиции в виртуальном миллиардном списке.
Re[3]: DataDridView vitrual mode очень много строк
Здравствуйте, zenalex, Вы писали:
Z>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, zenalex, Вы писали:
Z>>>Столкнулся с проблемой. При задании числа строк в DataGridView в виртуальном режиме все строки реально создаются. Данные запрашиваются по мере необходимости, но строки-то физически уже существуют! Поэтому, Если у DataGridView задать очнь большое кольчество строк, например, 1000000000, то все упадет с ошибкой OutOfMemory. Z>>>И это называется виртуальный режим??? Z>>>Подскажите, пожалуйста, может есть какая-нибудь хитрость...
А>>интересно было бы увидеть воочию пользователя, внимательно пролистывающего миллиард строк...
Z>Спасибо за ценный ответ. В принципе, я не спрашивал зачем, я спросил почему. Т.е. я так понимаю, это косяк microsoft...
Потому, что для любой ячейки любой строки можно задать атрибуты отображения например, такие как шрифт, цвет фона и т.п., каждая строка хранит ссылку на связный объект, строки каждая может иметь свою высоту, да и высоту всех строк (читай размер прокручиваемой области) можно получить лишь сложением высот всех строк.
У меня возник встречный вопрос, а не удивляет ли вас, что для всех отображаемых свойств связного типа, DataGridView создает соответствующие DataGridViewColumn??? Даже для тех которые не видны. Тогда видимо это тоже косяк!
Представьте теперь себе грид с 1000000000 колонок и парой записей! Думаю будет таже проблема с памятью, а возможно и с тормозами. Хотя на обычной XP проблемы скорее всего начнуться даже раньше, а именно при инициализации источника с 1000000000 записей. Потому как адресуемое пространство — 2Gb = 2*1024*1024*1024 b = 2147483648 b, делим его на кол-во записей (пренебрегаем затратами памяти на программу и пр.) 2147483648 / 1000000000 = 2,147483648 байт — максимальный размер одной записи.
и еще пара вопросов:
Вы правда считаете что пользователь будет все это смотреть?
Вы считаете вывод в 1000000000 записей информативным, поддающимся анализу, удобным для поиска и редактирования?
Может вы DBEngine пишите? Там это может пригодиться, для вывода всех строк какой-нибудь таблицы.
Не проще как-то порциями чтоль данные выводить, потому как если не грид упадет, то рано или поздно ваше приложение свалится.
и еще один: А вы записи в рантайме сортировать будете?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: DataDridView vitrual mode очень много строк
TT>Потому, что для любой ячейки любой строки можно задать атрибуты отображения например, такие как шрифт, цвет фона и т.п., каждая строка хранит ссылку на связный объект, строки каждая может иметь свою высоту, да и высоту всех строк (читай размер прокручиваемой области) можно получить лишь сложением высот всех строк.
TT>У меня возник встречный вопрос, а не удивляет ли вас, что для всех отображаемых свойств связного типа, DataGridView создает соответствующие DataGridViewColumn??? Даже для тех которые не видны. Тогда видимо это тоже косяк!
То есть DataGridView не умеет нормальный виртуальный режим ни по строкам, ни по столбцам.
Что и требовалось доказать.
Нормальный грид с виртуальным режимом позволит тебе отобразить таблицу миллиард на миллиард.
Люди! Бросьте эту каку!
Re[5]: DataDridView vitrual mode очень много строк
Здравствуйте, Igor Trofimov, Вы писали:
iT>То есть DataGridView не умеет нормальный виртуальный режим ни по строкам, ни по столбцам. iT>Что и требовалось доказать. iT>Нормальный грид с виртуальным режимом позволит тебе отобразить таблицу миллиард на миллиард.
iT> Люди! Бросьте эту каку!
Тебе винда этого не позволит, если все сразу в память грузить
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: DataDridView vitrual mode очень много строк
Здравствуйте, Igor Trofimov, Вы писали:
TT>>Потому, что для любой ячейки любой строки можно задать атрибуты отображения например, такие как шрифт, цвет фона и т.п., каждая строка хранит ссылку на связный объект, строки каждая может иметь свою высоту, да и высоту всех строк (читай размер прокручиваемой области) можно получить лишь сложением высот всех строк.
TT>>У меня возник встречный вопрос, а не удивляет ли вас, что для всех отображаемых свойств связного типа, DataGridView создает соответствующие DataGridViewColumn??? Даже для тех которые не видны. Тогда видимо это тоже косяк!
iT>То есть DataGridView не умеет нормальный виртуальный режим ни по строкам, ни по столбцам. iT>Что и требовалось доказать. iT>Нормальный грид с виртуальным режимом позволит тебе отобразить таблицу миллиард на миллиард.
iT> Люди! Бросьте эту каку!
нормальный виртуальный режим не создаёт обязательный миллиард объектов, т.е. того что вы делаете.
и нафиг столько?
Re[6]: DataDridView vitrual mode очень много строк