Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Внизчто быстрее? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c