Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Оптимизация сокетов


Автор: ilyalyu 26.12.2006, 19:18
Задача - передать через сокет 100 блоков по 10 байт. Возможны два способа. Вопрос - какой более эффективный?

Способо 1:

Послать все по отдельности. Вот приблизительный код:

Код

for i := 1 to 100 do socket.sendln(Block_i, 10);


Способо 2:

Сначала скопировать все данные в буфер, а затем один раз послать буфер через сокет. Приблизительный код:

Код

Ptr := @Buffer;
for i := 1 to 100 do begin
  move(Ptr, @Block_i, 10);
  inc(Ptr, 10);
  move(Ptr, #13#10, 2);
  inc(Ptr, 2);
end;
socket.sendln(Buffer, 100*12);


Как нетрудно видеть, первый вариант гораздо более компактный. Однако, насколько я понимаю, посылать 100 маленьких пакетов менее эффективно, чем один большой.

Во втором варианте все данные будут гарантированно переданы одним пакетом, но текст программы увеличивается многократно.

Кроме того, насколько я понимаю, сокет может и сам буферизировать отправляемые данные. В этом случае первый вариант также отправит один большой пакет, а не сто маленьких.

Автор: NoeR 2.1.2007, 22:58
Первый лучше, так как действительно будет отправлено одним пакетом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)