Молчун
Зарегистрирован: 15 June 2006
Сообщения: 20
Примеры кода: 0
|
RE: Проблема с большими объемами данных в ADO .NET. |
16 June 2006 10:37 |
|
|
|
|
DBDataReader не плохая штука, но нету команд MoveFirst, MoveLast, и т.д.
Суть такова что кода отображаешь таблицу на экране не все данные нужны.
Надо знать где находишься и не происходит каких либо изменений в определенном диапазоне.
К примеру для DataGrid надо:
1. Для текущей записи синхронизацию
2. Для диапазона видимости синхронизацию
Когда один пользователь меняет данные тогда за счет синхронизации можно будет обновить данные у других пользователей перед редактированием и изменением позиции. Если обновление произошло в видимом диапазоне надо просто перечитать данные. С курсом это халява.
К примеру в базе позиция 100 начало видимости 94 длина видимости 20.
Cursor.pos=100 , Cursor.Scroll=94 , Cursor.ScrollLen=20
Update Up -> Cursor.pos - Cursor.Scroll = 6
Update Down -> Cursor.Scroll+Cursor.ScrollLen - Cursor.pos = 14
Обычно делаю так в ADODB->Recordset:
1. Клонирую курсор
2. Затем запоминаю позицию в BookMark
3. Запуска обновление в верх
4. Восстанавливаю позицию из BookMark
5. Обновляю в низ
Почему именно это алгоритм если другой пользователь вставил данные, то они появятся.
Не надо забывать что у ADO DB есть события которые вызываются автоматически при обновлении данных. Эту штуку на практики использовали в MS-Access (DAO почти тоже что и ADO DB тока боле ранняя версия), C++, Delphi, VB и т.д.!
Это штука не совсем подходит для .NET проблема в том что когда будешь скролица по данным то в GC пойдут объекты из колонок а теперь применим это к 1GB и приплыли памяти просто будет не хватать. У клиентов не всегда мощные машины.
Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 16 June 2006 10:36
|
|