Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.10;
Скачать: CL | DM;

Вниз

Про 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
1-29331
Anton.
2004-01-29 17:40
2004.02.10
Handle


14-29549
sad
2004-01-21 08:17
2004.02.10
Lazarus.Win32..Компонент для работы с Interbase Firebird.


3-29202
Paul
2003-12-26 14:53
2004.02.10
Откючение ctrl+alt+del в XP


1-29425
Islander
2004-01-31 12:44
2004.02.10
Как конвертировать в TshortCut комбинацию клавиш Win+A?


4-29653
frost
2003-12-06 15:21
2004.02.10
Буфер Windows