У меня есть две программы, написанные на C ++, которые используют Winsock. Оба они принимают TCP-соединения, и один отправляет данные, а другой получает данные. Они скомпилированы в Visual Studio 2008. У меня также есть программа, написанная на C #, которая подключается к обеим программам на C ++ и пересылает пакеты, полученные от одной, и отправляет их другой. В процессе он подсчитывает и отображает количество переадресованных пакетов. Также отображается время, прошедшее от первого до самого последнего пакета.
Программа на C ++, которая отправляет пакеты, просто выполняет цикл 1000 раз, отправляя одни и те же данные. Когда я запускаю все три приложения на своей машине разработки (с использованием обратной связи или фактического IP-адреса), пакеты проходят через всю систему примерно за 2 секунды. Когда я запускаю все три на любом другом ПК в нашей лаборатории, это всегда занимает от 15 до 16 секунд. У каждого ПК разные процессоры и разные объемы памяти, но все они работают под управлением Windows XP Professional. На моем компьютере для разработки на самом деле установлен более старый AMD Athlon с вдвое меньшим объемом памяти, чем у одной из машин, которая выполняет эту задачу дольше. Я наблюдал за графиком времени ЦП в диспетчере задач на своем и еще одном компьютере, и ни один из них не использует значительную часть процессора (т.е. более 10%) во время работы этих программ.
У кого-нибудь есть идеи? Я могу только думать об установке Visual Studio на целевой машине, чтобы посмотреть, имеет ли это какое-то отношение к этому.
Проблема решена ================================================ ====
Сначала я установил Visual Studio, чтобы посмотреть, повлиял ли это на какой-либо эффект, но этого не произошло. Затем я протестировал программы на своем новом компьютере для разработки, и он работал так же быстро, как и мой старый. Запуск программ на ноутбуке с Vista снова показал результат 15 секунд.
Я напечатал временные метки по обе стороны от определенных инструкций в серверной программе, чтобы увидеть, какая из них занимает больше всего времени, и обнаружил, что задержка была вызвана вызовом метода Sleep () длительностью 1 миллисекунда. Очевидно, в моих старых и новых системах Sleep (1) игнорировался, потому что за одну миллисекунду отправлялось от 10 до> 20 пакетов. Иногда у меня бывали перерывы в выполнении примерно на 15 или 16 миллисекунд, что приводило к времени около 2 секунд для 1000 пакетов. В системах, которым требуется около 15 секунд для обработки 1000 пакетов, у меня будет промежуток в 15 или 16 миллисекунд между отправкой каждого пакета.
Я закомментировал вызов метода Sleep (), и теперь пакеты отправляются немедленно. Спасибо за помощь.