Консольные процессы Win32 в VISTA - 10% CPU, но ОЧЕНЬ МЕДЛЕННО - PullRequest
1 голос
/ 17 ноября 2008

У меня есть консольное приложение Win32, которое выполняет некоторые вычисления, скомпилированные в Compaq Visual Fortran (что, вероятно, не имеет значения).

Мне нужно запустить много из них одновременно.

В XP они занимают около 90-100% ЦП вместе, работают очень быстро. В Vista, независимо от того, сколько из них я запускаю, они занимают не более 10% процессорного времени (вместе) и работают очень медленно соответственно.

Происходит довольно много консольного вывода, но сейчас ОЧЕНЬ много. Я могу свернуть все окна, это не помогает. Процессор в основном ничего не делает ...

Есть идеи?

Обновление:

Нет, это разные машины, но они работают относительно одинаково. 2. Потоки не используются, это ОЧЕНЬ старое (20 лет) простое приложение для DOS, скомпилированное в win32. Предполагается, что он вычисляет итерации, пока они не встретятся, и потребляет все, что у него есть. Мое впечатление - VISTA просто не дает больше CPU

Ответы [ 6 ]

2 голосов
/ 17 ноября 2008

В Vista существовала известная "функция" , которая ограничивает некоторые консольные приложения до 32 МБ ОЗУ. Я не знаю, влияет ли эта «функция» на скомпилированные Compaq Visual Fortran компоненты.

Эта статья , по-видимому, была обновлена ​​совсем недавно, в октябре 2008 года, поэтому проблема все еще существует.

2 голосов
/ 17 ноября 2008

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

Вы делаете это так

c:\temp> dir > output.log

Если вы действительно не заботитесь о выводе, вы можете выбросить его, перенаправив на nul. например:

c:\temp> dir > nul
1 голос
/ 27 февраля 2009

Ваши циклы, очевидно, не простые вычисления. Там где-то есть системный вызов блокировки. То, что это работает на XP, не означает, что приложение не содержит ошибок.

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

1 голос
/ 17 ноября 2008

Как подсказал Тим, вывод на консоль (stdout) ОЧЕНЬ дорогой.

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

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

Кроме очевидного, ищите неочевидную конкуренцию за ресурсы, такую ​​как общий файл.

Но основная область, на которой я бы посмотрел, состоит в том, есть ли существенная разница в том, как ваш код компилируется для двух сред ОС - интересно, подвергается ли ваш код на Фортране каким-то особым штрафам при работе в Vista, например как режим совместимости. Посмотрите, насколько хорошо поддерживается Vista и можете ли вы ориентироваться на компиляцию для Vista. Также ищите тех, кто сообщает о похожих проблемах, таких как сообщения об ошибках, запросы функций и т. Д.

1 голос
/ 17 ноября 2008

Чтобы изложить на пост Даока - ваш компьютер XP может быть связан с ЦП для этого процесса, в то время как машина Vista связана с другим ресурсом.

уточнить: вывод на стандартный вывод (или другой) может замедлить обработку. (как переключение контекста или доступ к файлу и т. д.)

0 голосов
/ 17 ноября 2008

Это одно и то же оборудование на вашей Vista и XP? Он может использовать только 10% Vista, потому что он не требует больше. Вы используете тему? Я думаю, что для лучшего понимания требуется больше информации о вашем проекте. Вы пытались использовать профилировщик, чтобы увидеть, что происходит?

...