Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#31: 2009-04-21 18:11:26 ЛС | профиль | цитата
Ездил на работу... Отвлекся.
nesco, а вот такая схема дает почти 3-х кратный выигрыш по скорости

Add(MT_AddData,6805564,420,413)
{
Count=10
InputMT=0
link(onAdd,2176402:doStr,[])
}
Add(StringTable,1119084,581,413)
{
Left=370
Top=10
Width=305
Height=240
Columns=#4:Tab1|4:Tab2|4:Tab2|4:Tab4|4:Tab5|4:Tab6|4:Tab7|4:Tab8|4:Tab9|
}
Add(MT_String,2176402,525,413)
{
link(onResult,1119084:doAdd,[])
}


nesco писал(а):
ты усиленно хочешь доказать, что MT технология -- это ...авно
совсем нет.
.овно на своем месте - очень даже ценный продукт (удобрение).
А вот золотой унитаз - это унитаз и ничего больше.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:Валерий
Администрация
Ответов: 15295
Рейтинг: 1519
#32: 2009-04-21 18:24:26 ЛС | профиль | цитата
Андрей., сначало надо б выяснить, что у нас тормозит процесс...
карма: 27
0
Ответов: 5227
Рейтинг: 587
#33: 2009-04-21 18:30:41 ЛС | профиль | цитата
Посредники и спикулянты родные братья, которые хотят кушать.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 4698
Рейтинг: 426
#34: 2009-04-21 18:33:04 ЛС | профиль | цитата
Ну, во первых тормозит процесс сама таблица, т.к уходит время на ее построение...
карма: 10
0
Ответов: 16884
Рейтинг: 1239
#35: 2009-04-21 19:06:02 ЛС | профиль | цитата
Assasin писал(а):
Ну, во первых тормозит процесс сама таблица, т.к уходит время на ее построение...
сама таблица ничего не тормозит
А вот кто посчитает сколько раз проверяется If not _IsNULL(Data) then хотя бы в

procedure ThiMTStrTbl.ActionItm; // проверен
- это и есть тормоза.
и отказываться нужно от If_else , а применять Case.
Case работает намного быстрее.


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:andrestudio
Ответов: 5227
Рейтинг: 587
#36: 2009-04-21 19:36:08 ЛС | профиль | цитата
Tad, даже в скрипте Case рулят
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#37: 2009-04-21 20:02:00 ЛС | профиль | цитата
Tad, я с тебя балдю. Разве сразу нельзя было сказать -- а не занятся ли нам оптимизацией наших методов А зачем вопль поднял, что нет разделителей. В любом случае, новая таблица будет анализировать больше входных данных, и никуда от этого не денешься, даже, если мы оптимизируем все возможные методы.

Наскидку:

Стандартный метод

      Control.LVItems[Index,i] := gettok(s,_prop_StrDelimiter[1]);
более быстрый, чем применяемый в новых таблицах


      Control.LVSetItem(Row, Col, sd, iconum, [], I_SKIP, I_SKIP, 0);

Что теперь, отказаться от иконок надо Отвечу сразу -- такое, не пойдет
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#38: 2009-04-21 20:40:55 ЛС | профиль | цитата
nesco писал(а):
более быстрый, чем применяемый в новых таблицах

да нет...

повыкидывал из ActionItm все лишнее, чего не относится к добавлению строки в данном примере
code_12930.txt
получил 3.2 секунды против 4.4 в классическом примере - аж на 25% скорость работы выше. А теперь вставь еще проверку использования данных, которые мы безусловно копируем в Control.LVItemData[Row] и получаем 3с 27% разницы, т.е. на треть быстрее почти
карма: 27
0
файлы: 1code_12930.txt [472B] [238]
Разработчик
Ответов: 26163
Рейтинг: 2127
#39: 2009-04-21 21:40:56 ЛС | профиль | цитата
Dilma, так что, методы может лучше разнести, а не делать универсальный Ноу проблем -- сделаем отдельные
------------ Дoбавленo в 21.47:
Да, кстати, а куда девалась проверка списков иконок, ведь она тоже тормозит

карма: 22

0
Ответов: 16884
Рейтинг: 1239
#40: 2009-04-21 22:00:29 ЛС | профиль | цитата
andrestudio писал(а):
даже в скрипте Case рулят
Грубо говоря, вся винда в основном на Case построена потому, что If_else - это анализ и переход по условию, а Case это переход сразу на "метку" .
nesco писал(а):
Разве сразу нельзя было сказать -- а не занятся ли нам оптимизацией наших методов
И куда бы ты меня, как обычно, послал ?
nesco писал(а):
А зачем вопль поднял, что нет разделителей.

где вопль про разделители ? Ты кинул рекламу на MTStrTbl, а я тыкнул тебя в скорость.
И всего-то делов.
И если б Dilma не пил чай - так бы все и осталось
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#41: 2009-04-21 22:09:07 ЛС | профиль | цитата
Dilma, фигня все это, я только что проверил все это безобразие. Собака порылась не там, а вот здесь


ind := Control.LVCurItem; 

Мой код, в сравнении с твоим, отстает всего на 5% без этой фигни (кто бы мог полумать, что это такой медленный метод)

------------ Дoбавленo в 22.14:
Tad писал(а):
где вопль про разделители ?


Tad писал(а):
nesco писал(а):
Там нет, и никогда уже не будет делимитеров
и что это дает практически ? Уменшает размер кодов ? Увеличивает быстродействие ? Во сколько раз ?


Ты же мне ответил на разделители

Tad писал(а):
И если б Dilma не пил чай - так бы все и осталось

Правильно сделал, что пошел пить чай, молодец (но идея в оптимизации кода additem у меня созрела еще вчера, и я все равно бы добился ускорения)

карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#42: 2009-04-21 22:55:31 ЛС | профиль | цитата
nesco, на самом деле лучше разделить. И наверно завести какую-то метку для отсечения кода работы с иконками если они мне нафиг не нужны (для начала хотя бы... потому что по хорошему столь качественные изменения в работе метода в зависимости от использования фактически одного свойста - менеджера иконок - надо бы выносить в отдельные модули)

Tad писал(а):
И если б Dilma не пил чай - так бы все и осталось

Tad, могу только заметить на это, что если бы некоторые товарищи не кочевряжились, а подходили к решению обнаруженных ими проблем с большей серьезностью в рамках общепринятого регламента, то глядишь число помоишных постов бы сократилось, а число исправленных ошибок возросло. Все в руках пользователя.
карма: 27
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#43: 2009-04-21 23:24:42 ЛС | профиль | цитата
Dilma писал(а):
на самом деле лучше разделить.

Посчитал не стоит, Insert прекрасно работает и как Add, так что вот что получилось. Скорость весьма приличная


procedure ThiMTStrTbl.ActionItm; // проверен
var
Row, Col, iconum: integer;
fd: PData;
begin
case Data.Data_type of
data_null: exit;
end;
Row := Control.Count;
case Mode of
ITM_INSERT, ITM_REPLACE:
begin
Row := ReadInteger(Data, Null);
if (Row > Control.Count - 1) then exit;
end;
end;
Col := 0;
Control.LVItemInsert(Row, ');

if (Assigned(SmIlist) and (Control.LVStyle <> lvsIcon)) or
(Assigned(LgIlist) and (Control.LVStyle = lvsIcon)) then
iconum := ReadInteger(Data, Null)
else
iconum := I_SKIP;

while Col < Control.LVColCount do
begin
Control.LVSetItem(Row, Col, ReadString(Data, Null), iconum, [], I_SKIP, I_SKIP, 0);
inc(Col);
end;
case Data.Data_type of
data_null: exit;
end;
new(fd);
FillChar(fd^, sizeof(TData), 0);
CopyData(fd, @Data);
Control.LVItemData[Row] := cardinal(fd);
end;
------------ Дoбавленo в 23.36:
Проверил, действительно LVItems никакого выигрыша не дает в сравнении с LVSetItem. Мне кажется, не стоит менять алгоритм, после оптимизации, проверка наличия иконок мало влияет на быстродействие, на уровне погрешности системы
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#44: 2009-04-21 23:43:53 ЛС | профиль | цитата
Dilma писал(а):
если бы некоторые товарищи не кочевряжились, а подходили к решению обнаруженных ими проблем с большей серьезностью в рамках общепринятого регламента
подходил и с большей серьёзностью. Бестолку.
Ближайший пример серьёзности - ParentColor. На полном серьёзе выложил коды (всего-то две строчки в pas и одна в ini, а удобств море).
Один nesco согласился, что нужно добавить. Рецензии от Dilma недождались.
Тишина...
Спрашивается - и кому эта серьёзность нужна ?

И серьёзно.
fixes.txt 21:32 16.04.2009 писал(а):

- upg: расстановка половинок LineBreak после выполнения команды Разрыв
Очень удобно. Но... при вводе имени LineBreak, половинку Event или ставить дальше от компонента или AutoSize влево.




------------ Дoбавленo в 23.57:
nesco, как говорят на Украине: "Оце вже стає похожим на людину".
Скорее в 1.5 раза чем со старой StrngTable.
------------ Дoбавленo в 00.02:
C сегодняшнего дня начинаю пользоваться только MTStrTbl.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#45: 2009-04-22 00:05:35 ЛС | профиль | цитата
Dilma, возникло предложение загнать иконки в кортеж первым параметром, затем цвет, тогда их можно отсечь.
------------ Дoбавленo в 00.09:
Последняя редакция. Удалось еще 10% выдавить


procedure ThiMTStrTbl.ActionItm; // проверен
var
Row, Col: integer;
fd: PData;
begin
case Data.Data_type of
data_null: exit;
end;
Row := Control.Count;
case Mode of
ITM_INSERT, ITM_REPLACE:
begin
Row := ReadInteger(Data, Null);
if (Row > Control.Count - 1) then exit;
end;
end;
Col := 0;
Control.LVItemInsert(Row, ');

while Col < Control.LVColCount do
begin
Control.LVItems[Row, Col] := ReadString(Data, Null);
inc(Col);
end;
case Data.Data_type of
data_null: exit;
end;
new(fd);
FillChar(fd^, sizeof(TData), 0);

if (Assigned(SmIlist) and (Control.LVStyle <> lvsIcon)) or
(Assigned(LgIlist) and (Control.LVStyle = lvsIcon)) then
begin
Control.LVItemImageIndex[Row]:= ReadInteger(Data, Null);
end;

CopyData(fd, @Data);
Control.LVItemData[Row] := cardinal(fd);
end;

Вот только непонятно, оставить их в хвосте, или сделать как я сделал, те, занести их в отведенный для них параметр

Честно говоря, метод получился лучше и проще, чем в стандартной таблице, естественно, с учетом отсечки кортежа.
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)