Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Медленно работает CDS [D7]


Juice ©   (2006-09-15 15:45:00) 

В CDS загружаются данные из другого CDS и затем я оперирую этими данными в нем - передвигаюсь и редактирую то что надо изменить. Все это происходит в памяти и в базу попасть не должно. Проблема в том что при маленьких обьемах данных (100 записей например) очень большие задержки при вызове Post - около 0.5-1 сек . Например мне нужно пробежаться по ста записям и в поле где 1 поставить 0, и это занимает около 70  секунд! Что подскажите, что можно отключить, как повлиять, может кто-то сталкивался с таким?


Shaman_   (2006-09-18 12:43:00) [1]

>ChangeLog решило проблему
Вообще кэширование изменений не должно так сильно влиять на производительность. Может такое проявляется если записи очень "Тяжелые"...? Допустим большие записи в Blob полях


Juice   (2006-09-18 11:08:00) [2]


> Shaman_ ©   (16.09.06 12:30) [6]
> 2 Shaman_ ©   (15.09.06 17:24) [4]
>
> Такой же нелепый как изложеная автором проблема.

Спасибо за помощь, но насчет нелопости ты тут погарячился. Отключение ChangeLog решило проблему. А так, навскидку TestCDS := TClientDataSet.Create(nil);надо бы перед try.


Shaman_   (2006-09-16 12:30:00) [3]

2 Shaman_ ©   (15.09.06 17:24) [4]

Такой же нелепый как изложеная автором проблема. У автора метод Post в маленьких наборах данных CDS выполняется 0,5-1 секунд
Этот код собственно и есть маленький набор данных с методом Post на insert и edit


Fay   (2006-09-16 04:52:00) [4]

2 Shaman_ ©   (15.09.06 17:24) [4]
Нелепый код


Shaman_   (2006-09-15 17:24:00) [5]

Какой результат выдаст этот код?


procedure SpeedCalc;
var
TestCDS: TClientDataSet;
i: Integer;
StartDateTime,FinallyDateTime: TDateTime;
begin
try
 TestCDS := TClientDataSet.Create(nil);
 TestCDS.FieldDefs.Add('Field1',ftInteger);
 TestCDS.CreateDataSet;
 StartDateTime := Date+Time;
 for i := 0 to 100 do
 begin
  TestCDS.Insert;
  TestCDS.FieldByname('Field1').AsInteger := i;
  TestCDS.Post;    
 end;
 TestCDS.First;
 while not TestCDS.Eof do
 begin
  TestCDS.Edit;
  TestCDS.FieldByName('Field1').AsInteger := 100;
  TestCDS.Post;
  TestCDS.Next;
 end;
 FinallyDateTime := Date+Time;
 ShowMessage('Время старта: '+DateTimeToStr(StartDateTime)+#10+'Конечное время: '+DateTimeToStr(FinallyDateTime));
finally
 FreeAndNil(TestCDS);
end;
end;


Juice   (2006-09-15 16:52:00) [6]


> Механизм?

Data := Data


Shaman_   (2006-09-15 16:15:00) [7]

Нужна более детальная картина. Здесь проблема не в скорости CDS, а в чем то другом


Desdechado   (2006-09-15 15:57:00) [8]

> В CDS загружаются данные из другого CDS
Механизм?


Наверх

Титульная страница Поиск, карта сайта Написать письмо