-
Раньше как таблицу в памяти использовать VolgaTable - просто наверное самое лучшее из таблиц в памяти, и почему никто далее не поддерживает? :) Так вот: при добавлении допустим 30 тыс записей в цикле добавление происходило практически моментально. Пробовал использовать для аналогичной цели ClientDataSet - первые 10 тыс - нормально, потом начинает тормозить. Вопрос - почему?
-
своп
-
> своп ??? ну и нафига сейчас нужен комп с 64 мег оперативы "на борту"? выкинуть и сразу решатся все проблемы с тормозами...
нет уж, тут что-то другое, я за "кривые руки". кто еще?...
-
> потом начинает тормозить.
Треба расшифровки - насколько, в количественном выражении.
-
ClientDataSet.DisableControls;
try
finally
ClientDataSet.EnableControls;
end; Так тоже тормозит?
-
> я за "кривые руки". кто еще?...
... Борланда? :) Пустой проект. Есть только ClientDataSet и VolgaTable. Цикл добавления. Более - ничего. Время добавления в VolgaTable - 35 тыс записей - около 23 сек. Причем при добавлении еще 35 - 30 сек. У ClientDataSet - 35 сек, еще 35 тыс - 1,5 мин.
-
> Так тоже тормозит?
Ну я все же не совсем идиот :) Конечно - да)))
-
> Ну я все же не совсем идиот :) Конечно - да))) я про это всегда забываю... когда вижу голословные утверждения. нет ни капли желания проверять. проще верить интуиции про "кривые руки".
-
> Ну я все же не совсем идиот :) Конечно - да)))
Ну вот прикола ради тест наваял:
unit Unit30;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, StdCtrls;
type
TForm30 = class(TForm)
btnInitCDS: TButton;
CDS: TClientDataSet;
btnAdd1000: TButton;
btnAdd10000: TButton;
btnAdd100000: TButton;
lblResult: TLabel;
btnAdd1000000: TButton;
procedure btnInitCDSClick(Sender: TObject);
procedure btnAdd1000Click(Sender: TObject);
procedure btnAdd10000Click(Sender: TObject);
procedure btnAdd100000Click(Sender: TObject);
procedure btnAdd1000000Click(Sender: TObject);
private
procedure InitCDS;
procedure AddNRecords(Value: Integer);
procedure UpdateResultLabel(tc: Cardinal);
public
end;
var
Form30: TForm30;
implementation
procedure TForm30.AddNRecords(Value: Integer);
var
tc: Cardinal;
i: Integer;
begin
Screen.Cursor := crHourGlass;
try
tc := GetTickCount;
try
CDS.DisableControls;
try
for i := 1 to Value do
begin
CDS.Append;
try
CDS.FieldByName('ID').AsInteger := i;
CDS.FieldByName('Caption').AsString := 'AAAA';
finally
CDS.Post;
end;
end;
finally
CDS.EnableControls;
end;
finally
UpdateResultLabel(GetTickCount - tc);
end;
finally
Screen.Cursor := crDefault;
end;
end;
procedure TForm30.btnAdd1000000Click(Sender: TObject);
begin
AddNRecords(1000000);
end;
procedure TForm30.btnAdd100000Click(Sender: TObject);
begin
AddNRecords(100000);
end;
procedure TForm30.btnAdd10000Click(Sender: TObject);
begin
AddNRecords(10000);
end;
procedure TForm30.btnAdd1000Click(Sender: TObject);
begin
AddNRecords(1000);
end;
procedure TForm30.btnInitCDSClick(Sender: TObject);
begin
InitCDS;
end;
procedure TForm30.InitCDS;
begin
try
if CDS.Active then
begin
CDS.EmptyDataSet;
CDS.Close;
end;
CDS.FieldDefs.Clear;
CDS.FieldDefs.Add('ID', ftInteger);
CDS.FieldDefs.Add('Caption', ftString, 30);
CDS.CreateDataSet;
finally
UpdateResultLabel(0);
end;
end;
procedure TForm30.UpdateResultLabel(tc: Cardinal);
begin
lblResult.Caption := Format('RecordCount: %d; TotalTime: %d', [CDS.RecordCount, tc]);
end;
end.
-
1000 записей - мгновенно. 10000 записей - 47 мс. 100000 записей - почти 3 секунды (2891 мс). 500000 записей - 82 секунды с волосьями. Миллион - таки да, надоело ждать. Но кому нахрен нужно полмиллиона записей????
-
> Но кому нахрен нужно полмиллиона записей?
Спасибо, что не затеял тест 1T записей in memory :)
-
> просто наверное самое лучшее из таблиц в памяти
Голословно/бездоказательно. "Ф топку" (С)
-
> Голословно/бездоказательно.
По скорости работы - VolgaTable самая быстрая из всех тестируемых мной таблиц в памяти. По всем показателям - сортировка, вставка. Какое еще доказательство нужно?
> 1000 записей - мгновенно. > 10000 записей - 47 мс. > 100000 записей - почти 3 секунды (2891 мс). > 500000 записей - 82 секунды с волосьями.
Про 100000 ничего не напутал? У меня так получилось: 1000 - мгновенно. 10000 - 141 мс. 100000 - около 13 сек (ну уж никак не 3 сек!!!)
-
> По скорости работы - VolgaTable самая быстрая из всех тестируемых > мной таблиц в памяти. По всем показателям - сортировка, > вставка. Какое еще доказательство нужно?
TSI5TokenDictionary гораздо быстрее. 1.2 миллиона записей грузятся ~ за секунду, поиск - мгновенный. И чо?
Ещё раз: если ты сможешь внятно объяснить, нахрена тебе 100.000 записей в памяти, то можно попытаться найти решение проблемы. Если это тупая блажь, то и разговаривать не о чем.
> Про 100000 ничего не напутал?
Ничего.
-
> По всем показателям - сортировка, вставка. Какое еще доказательство нужно? "сортировка" с созданием локального индекса сравнивается с сортировкой по указателям? ламер. какое еще доказательство нужно?
-
> Про 100000 ничего не напутал? > У меня так получилось: > 1000 - мгновенно. > 10000 - 141 мс. > 100000 - около 13 сек (ну уж никак не 3 сек!!!)
Возможно разные машины. Мне тоже приходилось заниматься использование таблиц в памяти для достаточно больших объемов. Сравнивал разные типы и подходы, создав тестовое приложение.
Запустил тот тест и вот, что получил сейчас: *.FieldDefs.Add(F1, ftInteger, 0, False); *.FieldDefs.Add(F2, ftString, 64, False); Без каких-либо индексов, сортировок и ПК
DBISAM 10k - 0.95 s 30k - 6.9 s 50k - 18.3 s 100k - 73 s
FLAT 10k - 0.13 s 30k - 1.0 s 50k - 2.7 s 100k -10.5 s
CDS 10k - 0.28 s 30k - 2.1 s 50k - 4.7 s 100k - 21 s
Понятно, что от тачки зависит еще.
-
> ламер.
Ругаться не надо. Особенно в перед НГ! :) Девушки любить не будут! :)
> нахрена тебе 100.000 записей в памяти
У радиолюбителей есть разные дипломы. У любителей УКВ - есть диплом - сколько "квадратов" сработанно. Весь мир поделен на 32 тыс. больших квадратов от AA00 до RR99. При выболе диплома названия этих квадратов генерятся в цикле.
-
> У радиолюбителей есть разные дипломы.
У программистов - тоже. Скорее всего Вы что-то не так делаете. Архитектурно - не так.
-
> Весь мир поделен на 32 тыс. больших квадратов от AA00 до > RR99. При выболе диплома названия этих квадратов генерятся > в цикле.
Смысла загонять все это в память не видно. Если стоит задача учета "посещенных" квадратов, достаточно один раз сгенерить таблицу всех 32 тыщ. квадратов в базе и проверять/проставлять признак "наличие".
-
> Если стоит задача учета "посещенных" квадратов, достаточно > один раз сгенерить таблицу всех 32 тыщ. квадратов в базе > и проверять/проставлять признак "наличие".
Вот теперь самое интересное: давно хотел спросить - как более правильно - 1 раз сгенерить, и потом уже использовать готовую таблицу (так конечно быстрее, но и объем справочной таблицы увеличиться), или генерить? Ранее генерил, т.к. у многих были еще очень маленькие флешки (а моя программа должна с флешки работать). Сейчас уже флешку менее 2 гиг не найти. Правильно я так понимаю сгенерить и сохранять все в справочной БД (да, забыл сказать - таких сгенеренных таблиц у меня несколько - но вот эта с квадратами - самая большая).
-
> Alex_C (01.01.12 23:03) [19]
К врачу не пробовал обратиться ? У тебя явно прогрессирующая степень шизофрении.
Неумение свести множество полу-связанных ситуаций в одно логическое русло с ограниченными вариантами исхода - явный признак вышеозначенного.
-
> У тебя явно прогрессирующая степень шизофрении.
Позавчера Задорнова смотрел - там у него про троллинг в сетях было - ну точно про тебя :)
-
генерация всех возможных вариантов, для использования возможно десятки нужных... да это почище выборки всех данных чтобы отфильтровать на клиенте (очень глупо и очень распространено, с "оправданием" - sql не знаю).
расчетные значения должны рассчитываться "на месте". и только для нужных/выбранных значений а не для всех 32 тыщ.
ты бы действительно логику продумал...
-
определись, на какие вопросы юзера должен отвечать твой софт. если среди них нет вопроса «дай мне список любителей, окучивших квадраты AB12, CD34 и EF56», то таблица вариантов тут даром не нужна.
-
> ты бы действительно логику продумал...
Ну так я тут и советуюсь - форум для этого и существует! :)
> «дай мне список любителей, окучивших квадраты AB12, CD34 > и EF56»
В том то и дело - что нужна! Это для УКВ - и у них там есть куча разных дипломов, основанных именно на разные сочетания сработанных этих квадратов. По этому думаю вот как: в плане квадратов (их там более 32 тыс) таблицу заранее сгенерить. Потому как без sql делать нужную выборку практически не реально. А вот для других аналогичных дипломных программ, где квадратов не более 100 - начальный список генерить. Хранить смысла особого нет - все и так практически моментально делается.
-
> Ну так я тут и советуюсь - форум для этого и существует! :) ты не советуешься, ты задаешь бессмысленно глупые вопросы... глупые потому, что причин, логики твоей никто не знает, и ты не говоришь, почему хочешь именно так, а "совета" спрашиваешь по конечному, придуманному тобой, и выглядящему бредово... фактически только подтверждения ждешь, типа "да нужно именно так". бессмысленно потому, что даже где понято, и что-то присоветовано, не следуешь... непонятое игнорируешь? и говоришь что учишься. ага.
вот что непонятного в том что расчетные данные нужны только для уже выбранного (маленького количества), и потому расчеты будут быстрыми в любом случае. ??? так нельзя сделать? не вкладывается в твои реалии. ну тогда где объяснение почему тебе это не подходит (почему нельзя использовать "совет")?
-
> как более правильно - 1 раз сгенерить, и потом уже использовать > готовую таблицу (так конечно быстрее, но и объем справочной > таблицы увеличиться), или генерить?
можно и сгенерить, SQL-запросы будет удобнее составлять.
-
> Alex_C
А чем тебе двумерный битовый массив не угодил? На одного радиста всего-то 4к памяти надо.
-
> А чем тебе двумерный битовый массив не угодил?
Человек копает землянку детской лопаточкой, бесполезно советовать ему как строить небоскреб.
-
> бесполезно советовать ему как строить небоскреб.
Небоскреб уже построен - и обогнал он уже по высоте многие рядом стоящие. На самом деле остался только один. Его и пытаюсь обогнать. На счет грубости и пошлости - привык уже - все же с 98 года программа. К сожалению для программеров это в порядке вещей.
В общем спасибо форуму - очень мне помог!
А теперь на прощанье маленькая притча - реальная история. Ее мне мой преподаватель математики рассказал: (сейчас уже подробностей не помню, но ее думаю многие знают): пришел как то к одному известному математику молодой юноша - богатый, влюбленный в математику, но ... но не гений. И сказал юноша: хочу прославиться в истории. Математик подумал.. ну что ему сказать.. послать? Но юноша посулил много денег на университет, в котором математик преподавал. И математик сказал - сделай таблицу простых чисел от 1 до 1000000 (а дело было в 18 веке - только руками считать.) И посчитал математик, что избавился он от юноши навсегда. Но через 20(???) лет пришел к нему тот мужчина(бывший юноша) и сказал - я сделал то, что ты мне велел. И оказалась что на многие десятилетия его таблица простых чисел вошла в историю. И его имя знает каждый уважающий себя математик))) Так что так: чтоб войти в историю кроме ума, еще и трудолюбие нужно. А оно у меня есть))) Удачи всем))))
-
>... еще и трудолюбие нужно. А оно у меня есть)))
Так никто не против Вашего трудолюбия и занятия - это Ваше дело.
Вы же не в первый раз появляетесь здесь на форуме и с весьма дилетантскими вопросами. Апелляция Ваша, к более чем 10-летнему сроку исполнения программы - лишнее тому подтверждение.
Вы игнорируете советы, направленные на выяснение принципиальных вопросов в Ваших задачах, упорствуя на своем видении решений, т.е. изобретаете кучу велосипедов.
Никто не спорит - почти любую задачу можно решить разными методами, имея в распоряжении время.
Кстати, Вы даже игнорируете реальную помощь в решении Ваших задач. Некоторое время назад, я Вам предложил здесь на форуме такую помощь, поскольку и сам являлся радиолюбителем, да и по военной профессии - связист. Вы проигнорировали, возможно не заметили такое предложение, а скорее всего - предпочли быть и дальше единоличным "велосипедистом".
Вы обращаетесь за помощью и советами на форум, где присутствуют профессионалы и сетуете на "хамство" с их стороны. Это не хамство, а жесткая позиция, что никто тут не будет участвовать вместе с Вами в постройке Ваших "велосипедов", а призывает Вас перейти в русло профессиональных обсуждений.
Но Вы к этому не готовы, это очевидно.
Кстати, задача обслуживания QSL-карточек и радиолюбительских дипломов решается программистом-профессионалом, при условии наличия адекватного ТЗ, не более чем за месяц.
Для Вас же совершенно понятная стоит Цель - переплюнуть такого же "велосипедиста". Вот почему и было сказано - "копаете лопаточкой". Повторюсь - никто не против Вашего копания, это Ваше дело.
Что же касается притч и афоризмов, мне больше по душе: "Знание некоторых принципов избавляет от необходимости знания многих фактов".
Удачи и с Рождеством !
-
> Alex_C
Кто не слушает других обычно считает, что не слушают его. Успехов!
-
"Ну вот, еще один уходит от нас с ожесточенным сердцем"
(почти Шарапов)
-
> Вы же не в первый раз появляетесь здесь на форуме и с весьма > дилетантскими вопросами.
Может у меня не правильное восприятие форума. Понимаете - действительно - очень много грубости , причем не обоснованной именно на програмерских форумах. Я допустим общаюсь на форуме пользователей автомобилей Nissan - там вообще все очень доброжелательно. Да - у людей и так в жизни все хорошо, вот и советуют от души - никто не злится. На счет делитанства - если не поленитесь и проанализируете мою программу (RX4HX) мысли об этом пройдут сразу))) Поверьте))) Я просто хочу ВЫТЯНУТЬ народ на ДИАЛОГ. Не МОНОЛОГ, а ДИАЛОГ. Не уверен, что мне это получается(((
> Вы игнорируете советы
Опять же простое непонимание. Вы даже представить себе не можете, как данный форум (не по БД - а вообще) продвинул мою программу. Пользователь Сергей М. рассказал мне (нет не рассказал - а заставил подумать!) как правильно сделать телнет - остальные проги так и не смогли этого сделать))) Я и не прошу готовых решений - я хочу ДИСКУССИИ! А не так - делай ТАК по тому что это верно. Слишком много раз убеждался в обратном.
> "Знание некоторых принципов избавляет от необходимости знания > многих фактов".
Если бы все следовали этому принципу то и открытий не было в принципе. Приведу пример из своей не столь уж давней молодости: в 90-е годы считалось что ГПД транзистора более 80% - практически не достижим. У современных транзисторов ГПД около 99,9%! А всего то прошло?)))
-
> Alex_C (06.01.12 20:02) [33]
Видишь ли, в чем дело. Ты задаешь вопрос, а не направление дискуссии.
Прежде чем погрузиться в проблему, которую ты предлагаешь решать так, а не иначе, хотелось бы узнать, почему тобой было отвергнуто простое и очевидное решение [27]?
-
> почему тобой было отвергнуто простое и очевидное решение [27]? он хочет не такого диалога. где он должен "отчитываться", и доказывать что выбранное им верно, а такого когда все вокруг наперебой варианты предлагают, код в доказательство "лучшести" пишут, а он так лениво, не не пойдет, отстой, ну это уже было... ну типа того, такое сложилось впечатление.
-
> (RX4HX)
Посмотрел, наворочено много, дизайн - отстой. Таково же мнение части его "товарищей по болезни".
С другой стороны - "Если нет шансов на женщину, сойдет и резинка".
-
> [8] Ega23 © (29.12.11 13:09) > TForm30 ... > CDS.FieldDefs.Add('Caption', ftString, 30); > 100000 записей - почти 3 секунды
Это магия. Так нечестно.
-
> Это магия. Так нечестно.
:))))))))
|