Войти

Показать полную графическую версию : Огромная разница в производительности между программами под DOS и Windows


Oleg_SK
10-02-2009, 02:39
Интересное наблюдение: программа, работающая в среде MS DOS, выполняется в десятки раз быстрее, чем эта же программа, запущенная под Windows (в DOS-окне). Программа почти полностью независима от ОС. Единственная вызываемая функция ОС предназначена для вывода символов на экран монитора (программа выводит кол-во найденных ею решений задачи). Интересно, с чем связана такая разница в производительности? При запуске программы под Windows, другие программы в это время не запускались (без учета тех, что стартуют при загрузке ОС и сидят в трее).

DVDshnik
10-02-2009, 06:49
Имхо, DOS и запускается-то практически мгновенно... Так что ничего удивительного не вижу. На работе ребята, связывающие компьютеры с оборудованием, частенько до сих пор DOS'ом пользуются.

DMGarikk
10-02-2009, 09:10
Разница в том что DOS программы в Windows через эмулятор работают....и соответственно странно былобы ждать идеальной работы :)

Oleg_SK
10-02-2009, 11:24
DMGarikk, я не вижу в данном случае особой разницы для программы. Возможно я чего-то не понимаю? Какая разница в данном случае: в чистом DOS она работает, или под эмулятором? Напомню, что программа почти не обращается к функциям ОС. Через функции DOS она лишь печатает на экране текущее кол-во найденных решений задачи. Значение на экран выводится только когда найдено новое решение задачи. Что именно тормозит выполнение программы (не считая многозадачной среды)? Например: работая под чистой DOS, программа за 8 часов нашла около 50000 решений, а при работе под эмулятором за то же время она нашла только около 2000 решений. Вы считаете, что если я перепишу эту программу как Win32-приложение, то разница в производительности кардинально уменьшится?

P.S: Хотя, возможно, на эту разницу влияет неравномерное распределение решений по оси времени (если так можно выразиться). Например, программа может проработать час и не найти не одного решения, а затем за несколько минут найти сразу несколько решений. Собственно задача в том, чтобы найти путь для шахматного коня на поле 8x8. Конь должен побывать на каждой из клеток доски, причем на каждой клетке он может побывать лишь один раз.

CyberDaemon
10-02-2009, 12:28
в чистом DOS она работает
И использует практически все процессорное время (и сам процессор ей используется без "посредников")
многозадачной среды
Именно. Как дойдет до программы очередь процессором попользоваться (и то не напрямую)- так посчитает немного.
Попробуй в диспетчере задач приоритет у программы изменить - как изменится время работы?

detrin
10-02-2009, 14:04
Oleg_SK, Возможно эмулятор "кривоватый". Попробуйте в виртуальной машине установить "чистый" DOS и там проверить производительность.

Именно. Как дойдет до программы очередь процессором попользоваться (и то не напрямую)- так посчитает немного. »
Ну и сколько win сжирает ресурсов процессора? Ну максимум 10% при простое, а тут говорится о "программа, работающая в среде MS DOS, выполняется в десятки раз быстрее".

DMGarikk
10-02-2009, 14:46
Напомню, что программа почти не обращается к функциям ОС »

Вот!! Но в Windows нельзя получить доступ к ресурсам комьютера напрямую (как в DOS) все эти вызовы всёравно перенаправляются через разные API и т.п. эмулятором, и естественно, как верно упомянули выше, многозадачность ложку дёгтя добавляет

exo
10-02-2009, 15:16
программа, работающая в среде MS DOS, выполняется в десятки раз быстрее, чем эта же программа, запущенная под Windows (в DOS-окне). Программа почти полностью независима от ОС. »
а можно пример программ?

Oleg_SK
10-02-2009, 17:49
Вот!! Но в Windows нельзя получить доступ к ресурсам комьютера напрямую (как в DOS) все эти вызовы всёравно перенаправляются через разные API и т.п. эмулятором »
Все верно, но тут есть одно но: за все время работы программы под эмулятором (8 часов) функции DOS для печати на экране и записи найденых решений в файл вызывались относительно маленькое кол-во раз (~15000 раз). Мне не верится, что это могло настолько сильно повлиять на производительность программы. Скорее всего, основным тормозом послужила многозадачность ОС.

а можно пример программ? »
К сожалению, примеров привести не могу. Возможно, такая же ситуация будет наблюдаться с любой небольшой DOS-программой, выполняющей длительные вычисления, и которой не требуется работать с HDD (т.е. эта программа должна работать только с теми данными, которые находятся в RAM). В моем случае, описанная здесь ситуация произошла с моей программкой, которую я написал для решения задачи описанной мной в посте #4. Кстати (только сейчас подумал), моя программка была довольно мала, и IMHO при работе под чистым DOS, она вполне могла вместе со своими данными постоянно находиться в кэше CPU.

ALL
Данная ситуация произошла уже давно (во времена Pentium III и Windows 98 SE). Моей программы, о которой тут я говорил, уже давно нет. Просто перебирал вчера свои старые бумаги, и, наткнувшись на схемы той программки, вспомнил данную ситуацию, и решил ради интереса рассказать о ней, и узнать возможные ее причины.

detrin
11-02-2009, 16:08
Покопался в инете, нашел вот такую информацию (http://www.ref.by/refs/67/15215/1.html):
Несмотря на кажущуюся «моральную отсталость» MS DOS, в ряде случаев
использование MSDOS-архиваторов может быть гораздо более эффективным, по
сравнению с аналогичными версиями для Windows 9x.
1. Архиваторы работающщие в среде MSDOS работают в реальном режиме
процессора. Это обеспечивает не менее чем в 1.5 раза большую
производительность процессора, по сравнению с защищенным режимом
Windows 9x (для процессоров P-II и старше).
2. Все версии архиваторов для MS DOS ( по крайней мере из рассмотренных
выше), весьма эффективно используют память XMS или EMS. С учетом
реального режима работы процессора, это дает еще 10-15 % выиграша в
производительности.

Busla
11-02-2009, 16:50
detrin, бред какой-то: использование XMS и EMS - это защищённый режим работы процессора.




© OSzone.net 2001-2012