Программы запускаются за 2 секунды на моей машине, но 15 секунд на других - PullRequest
2 голосов
/ 27 августа 2009

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

Ответы [ 2 ]

3 голосов
/ 27 августа 2009

Вы должны указать свою заявку на хорошем, 2-секундном и 15-секундном лабораторном случае и посмотреть, чем они отличаются. Разница может быть связана с любым количеством проблем (диск, антивирус, сеть) - без каких-либо данных, резервных копий, мы будем снимать в темноте.

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

0 голосов
/ 27 августа 2009

Вы можете попробовать проверить Настройки реестра настройки производительности Winsock - это может быть установка какой-либо игры или утилита настроила их на вашем ПК.

...