Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизПро TClientDataSet. Найти похожие ветки
← →
Тимохов (2004-01-20 11:17) [0]Несмотря на большой опыт разработки клиентов баз данных в дельфи, я практически не знаю стандартные визуальные и невизуальные датабазные компоненты дельфи, т.к. ими не пользуюсь.
Тут возник вопрос в сравнении храктеристик рекордстета собственной разработки и TClientDataSet.
Вопрос собственно говоря такой. Можно ли сказать, что в приведенном ниже коде я использую TClientDataSet наиболее оптимально? Возможно, что есть какие-то методы ускоряющие задачу (ну типа каких-нибудь блокировок или что-то подобное)?
with ClientDataSet1 do
begin
with FieldDefs.AddFieldDef do
begin
DataType := ftInteger;
Name := "Field1";
end;
with FieldDefs.AddFieldDef do
begin
DataType := ftString;
Size := 10;
Name := "Field2";
end;
CreateDataSet;
end;
for I := 1 to 100000 do
begin
ClientDataSet1.Fields[0].Value := 1;
ClientDataSet1.Fields[1].Value := "1";
end
(Т.е. создается рекордстет с двумя полями и добавляются сто тыс строк.)
← →
Academic (2004-01-20 11:21) [1]В конкретном примере нет ничего лишнего.
В чем собственно вопрос не очень понятно.
← →
Тимохов (2004-01-20 11:24) [2]Поясню.
НАпример для TListView есть метод BeginUpdate, который сильно ускоряет добавление элементов.
Вопрос в том, что может здесь тоже что-то есть такое, что надо сделать, чтобы добавление шло быстро?
Задам вопрос с другой стороны: можно ли считать приведенный код наилучшей реализацией задачи - добавить в TClientDataSet, находящийся чисто в памяти, 100000 строк?
← →
Тимохов (2004-01-20 11:27) [3]Работает это уж как-то ужалающе медленно (40 сек) и памяти много берет (17 мб) :(((
← →
Карелин Артем (2004-01-20 11:29) [4]DisableControls может поможет??? А 17 мегов это мало.
← →
Тимохов (2004-01-20 11:32) [5]К контролам вообще не подвязывался... Только один TClientDataSet.
← →
Тимохов (2004-01-20 11:34) [6]Проблемы для меня как таковой нет. Обращаюсь к мастерам датабазных компонент дельфи, т.к. сам не в состоянии быстро разобраться с компонентами. Да и нужно это мне лишь для сравнения.
Ну тогда буду считать, что по времени добавления мой рекордсет выигрывает в 100 раз, и в 3 раза по памяти. :)))
← →
Карелин Артем (2004-01-20 11:40) [7]Тимохов © (20.01.04 11:32) [5]
У IbQuery влияет без контролов.
← →
Семен Сорокин (2004-01-20 11:42) [8]Тимохов ©
имхо, зависит от задачи, я тоже давно не использую DB-компоненты, вышепривденный кусок кода я бы просто загнал в TList или его потомка.
← →
Тимохов (2004-01-20 11:51) [9]Ладно, спасибо.
Приятно, что писал свое не зря :)))
← →
Nikolay M. (2004-01-20 11:58) [10]
> буду считать, что по времени добавления мой рекордсет выигрывает
> в 100 раз, и в 3 раза по памяти. :)))
А у тебя поддержка индексов есть и, как следствие, сортировка НД на лету? Загрузка/выгрузка в/из XML? История редактирования НД (как следствие, возможность делать UNDO)? Не говоря уже про передачу данных в собственно таблицу.
Если вся задача твоего рекордсета - держать в памяти таблицу, рекомендую посмотреть на RX-овые RxMemoryData & MemoryTable.
← →
Тимохов (2004-01-20 12:03) [11]Nikolay M. © (20.01.04 11:58) [10]
Индексов нет.
XML нет.
Итории вроде тоже нет.
Таблицы тоже нет.
Все в памяти.
← →
Nikolay M. (2004-01-20 12:08) [12]
> Тимохов © (20.01.04 12:03) [11]
Тогда - RxMemoryData или MemoryTable, зачем изобретать велосипед?
← →
Deniz (2004-01-20 12:39) [13]>Тимохов © (20.01.04 12:03) [11]
Так что-же тогда сравнивать?
Вот таким же образом DBF с Oracle сравнивают :)))
Тогда давай сравним Твой RecordSet(если его так можно назвать) с TList.
Вставка 1 000 000(млн) записей на моем компе занимает 0.265 с.
Для сравнения тест с ClientDataSet и 100 000 занимает 32 с, т.е. не сильно отличается от тех, что у тебя!
← →
Dred2k (2004-01-20 17:58) [14]Хм, так после CreateDataSet нужно отключить историю (LogChanges := False). Тогда и длительность операции уменьшается в два слишним раза. (только что проверил специально)
Кроме того, RxMemoryData - не конкурент TClientDataSet-у. В этом я убедился на все 100 - на некоторых операциях производительность Rx... меньше в десятки раз.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c