【发布时间】:2020-04-18 17:06:51
【问题描述】:
当通过IndyTCPClient 和IndyTCPServer 传输记录数据时,我总是使用一种简单的方法——所有记录都具有固定大小并被放置到流中:
在客户端:
type
TUser = record
i:integer;
s:string[100];
i64:Int64;
s2:string[200];
end;
with idClient.Socket do
begin
MStream := TMemoryStream.Create;
try
MStream.Write(User, sizeOf(TUser));
MStream.Seek(0, soBeginning);
write(MStream, MStream.Size);
finally
MStream.Free;
end;
end;
在服务器端:
with AIdCondext.Connection.Socket do
begin
MStream := TMemoryStream.Create;
try
ReadStream(MStream, sizeOf(TUser), False);
MStream.Seek(0, soBeginning);
MStream.read(User, MStream.Size);
finally
MStream.Free;
end;
end;
它工作正常,但似乎不是很有效,因为我需要使用固定长度的字符串,这些字符串几乎总是空的,而且记录通常作为需要发送的大型数组的一部分。有没有办法在不单独发送记录成员的情况下更有效地做到这一点?
【问题讨论】:
-
您想提高效率,还是考虑一次性发送整条记录?似乎后一个约束会阻碍你。
-
通常我的记录很多,会员很多,转账也很多,拆分会导致代码难看
-
您需要发送多少记录,需要多长时间?这段时间对你来说是不是太长了?
-
我猜你已经下定决心了。听起来您必须在发送更少的数据或编写一些代码之间做出选择。听起来你想要什么都不劳而获。如果你做得好,它就不需要丑陋。还有其他好处,比如不受 ANSI 文本的束缚!
-
我想知道代码是否可能比更丑的代码更有效。