Проблемы со скоростью отклика между клиент-серверным приложением на C#

интернет программирование windows C# .net

Суть:
Клиент передает данные на серверное ПО
Формат пакета
public class dataCS
{
public char cmd;
public int id;

public dataCS(char c, int i)
{
cmd = c; //Команда
id = i; //ИД клиента
}
}

Экземпляр класса сериализуется, массив байтов передается.
При работе на локальной машине (К и С работают на одном хосте, подключение через 127.0.0.1) все работает идеально, задержки почти нет.

При работе через сеть (и через хаб и через кроссовер), клиент и сервер на разных хостах, задержки составляют порядка секунды.

ИТАК,
Каким образом можно избежать задержек при работе через сеть?

P.S.: Данная задача, реализованная посредством PHP и JavaScript (через браузер, соответственно) выполняется на ура, но, по некоторым причинам реализация через PHP не может быть использована.

Примечание:
Окей... Надеюсь, код читаем. Тапками не кидайте, я дилетант.

http://pastebin.com/4CQawNRP

Не дали запостить код сюда, поэтому пастабин.

Примечание:
Это я вообще не делал, но код установки соединения приведу: http://pastebin.com/3e5E1MMw

Делал на основе чата какого-то.

Примечание:
Спасибо, я попробую Ваш совет, надеюсь, поможет. Но не в ближайшие 10 часов, к сожалению.

к слову, анализ потоков показал, что 73% процессорного времени сервера тратится на синхронизацию.
afk.

Примечание:
Мне не приходил в голову такой способ, ля меня это на данный момент за рамками понимания. :D

Примечание:
Спасибо! Ваш совет очень помог! Все идеально.
Ответы:
Код сетевого взаимодействия покажите. Или Вы телепатов ждёте?
Не хватает самой важной части: создание и установка опций для TcpListener и TcpClient. В частности интересует опция TcpClient.NoDelay.
В сервере после
TcpClient localClient = listener.AcceptTcpClient();
добавляете
localClient.NoDelay=true;
Кстати, а почему Вы не хотите сериализовать/десериализавать данные непосредственно в NetworkStream? Зачем вся эта возня с преобразованием объектов в массив байт?
public static bool SendData(NetworkStream stream,object data){
   try{
       new BinaryFormatter().Serialize(stream,data);
       return true;
   }catch(Exception e){
       //TODO
   }
   return false;
}
public static T ReceiveData<T>(NetworkStream stream){
   try{
       return (T)new BinaryFormatter().Deserialize(stream);
   }catch(Exception e){
       //TODO
   }
   return default(T);
}


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.