Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-29328
alexEagle
2004-01-29 00:42
2004.02.10
Почему падает TForm.Create?


1-29413
Maxim Vetera
2004-01-31 20:30
2004.02.10
2 динамических массива в 1


3-29279
Bers01
2004-01-16 17:10
2004.02.10
Доступ к БД Access2000


1-29385
Прямой
2004-02-01 22:18
2004.02.10
Надо получить иконку для зарегистрированного в системе файла


11-29291
acp
2003-05-26 23:32
2004.02.10
TBitmap не хочет сохранять картинку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский