У меня есть две программы, написанные на 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 (), и теперь пакеты отправляются немедленно. Спасибо за помощь.