Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

что быстрее?   Найти похожие ветки 

 
Romal   (2006-11-22 22:44) [0]

Две моих программы выполняются на одной машине и обмениваются данными по 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, а во втором цикл, какой способ будет выполняться быстрее и меньше жрать ресурсов? Может я вообще зря беспокоюсь, такие операции не сожрут много ресурсов?  Наставьте пожалуйста на путь истинный!


 
DrPass ©   (2006-11-22 22:49) [1]


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

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


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

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


 
Джо ©   (2006-11-22 23:06) [3]

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


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

Romal   (22.11.06 23:00) [2]

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


Это про как ?


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

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;


 
MikePetrichenko ©   (2006-11-23 09:10) [6]

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


 
RWolf ©   (2006-11-23 09:50) [7]

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



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
6-1153729806
KyRo
2006-07-24 12:30
2006.12.10
Возникает ошибка при коннекте


2-1164115226
Mishenka
2006-11-21 16:20
2006.12.10
Как в Image загрузить PCX файл?


15-1163774225
antonn
2006-11-17 17:37
2006.12.10
сохранение картинки из ИЕ


15-1164095160
boriskb
2006-11-21 10:46
2006.12.10
А вы говорите: "Злые розыгрыши"


15-1163946111
tesseract
2006-11-19 17:21
2006.12.10
Кредитка, нормальная