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

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

что быстрее? [D5, XP]


Romal ©   (2006-11-22 22:44:00) 

Две моих программы выполняются на одной машине и обмениваются данными по UTP пять раз в секунду. Данные я могу передать двумя способами
1. Передать строку вида: 'AB123;BC234;CD5432;'
и получить данные другим приложением примернотак:
while ((pos(';',DStr)>0) AND (length(DStr)>0)) do
   begin
   If copy(DStr,1,2)='AB' then Client.Day := strtoint(copy(DStr,2,pos(';',DStr)-1)) else
   If copy(DStr,1,2)='BC' then Client.Year := strtoint(copy(DStr,2,pos(';',DStr)-1)) else
   If copy(DStr,1,2)='CD' then Client.Money := strtoint(copy(DStr,2,pos(';',DStr)-1)) else
   If copy(DStr,1,2)='DE' then Client.Limit := strtoint(copy(DStr,2,pos(';',DStr)-1)) else
   If copy(DStr,1,2)='JP' then Client.Port := strtoint(copy(DStr,2,pos(';',DStr)-1)) else
   If copy(DStr,1,2)='EF' then Client.Tim := strtoint(copy(DStr,2,pos(';',DStr)-1)) ;
Delete(DStr,1,pos(';',DStr));
end;

2. Второй способ передать два массива
первый массив array [1..30] of Booleanбудет обозначать где были сделаны изменения, а второй массив array [1..30] of Integerбудет содержать сами данные. И в цикле пройти первый массив и присвоить полям записи Client данные из второго массива.

Вопросы. Какой способ лучше? В первом присутствуют strtoint и copy, а во втором цикл, какой способ будет выполняться быстрее и меньше жрать ресурсов? Может я вообще зря беспокоюсь, такие операции не сожрут много ресурсов?  Наставьте пожалуйста на путь истинный!


RWolf   (2006-11-23 09:50:00) [1]

сколько машинного кода в той или иной функции - можно посмотреть в map-файле утилитой MapCountCodeSize.exe.


MikePetrichenko   (2006-11-23 09:10:00) [2]

Что есть UTP? (витая пара?)
На одной машине - Interprocess Communications. RTFM. Mail Slots, Pipes. Memory Mapped Files.


SlymRO   (2006-11-23 07:48:00) [3]

Romal   (22.11.06 22:44)
array [1..30] of Boolean

принципиально ничего не меняет, и зачем передавать array [1..30] of Int при изменении одного параметра?
var
 p,v:integer;
 a:string;
begin
 while length(DStr)>0 do
 begin
   p:=pos(';',DStr);
   if p=0 then Break;
   a:=UpperCase(copy(DStr,1,2));
   v:=strtoint(copy(DStr,2,p-1));
   If a='AB' then Client.Day:=v else
   If a='BC' then Client.Year := v else
   If a='CD' then Client.Money := v else
   If a='DE' then Client.Limit := v else
   If a='JP' then Client.Port := v else
   If a='EF' then Client.Tim := v;
   Delete(DStr,1,p);
 end;
end;


Протокол придумываешь? Какие типы данных нужно передавать?
Протокол для Int, 256 параметров:
type
PRec=^TRec;
TRec=packed record
 ParmType:byte;
 ParmValue:integer;
end;
PRecArray=^TRecArray;
TRecArray:array[0..255] of TRec;

var DStr:string;
i,c:integer;
RecArray:PRecArray;
begin
 DStr:=ReadData;
 c:=length(DStr) div SizeOf(TRec);
 RecArray:=PRecArray(pointer(PChar(DStr)));
 for i:=0 to c do
 begin
   case RecArray^[i].ParmType of
     1: Client.Day:=RecArray^[i].ParmValue;
     ....
   end;
 end;
end;


balepa   (2006-11-23 06:03:00) [4]

Romal   (22.11.06 23:00) [2]

Я и хотел узнать, например, strtoint - это не много операций?


Это про как ?


Джо   (2006-11-22 23:06:00) [5]

Практика — критерий истины.


Romal   (2006-11-22 23:00:00) [6]

Я и хотел узнать, например, strtoint - это не много операций?


DrPass   (2006-11-22 22:49:00) [7]


> Может я вообще зря беспокоюсь, такие операции не сожрут
> много ресурсов?

Как ты думаешь, для компьютера, который в секунду делает несколько миллиардов операций в секунду это много?


Наверх

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