我有一个Win32控制台应用程序正在进行一些计算,在Compaq Visual Fortran中编译(可能无所谓)。
我需要同时运行很多。
在XP中,它们一起占用大约90-100%的CPU,工作速度非常快。 在Vista中,无论我运行了多少,它们的CPU(一起)不超过10%,并且工作速度非常慢。
有很多控制台输出正在进行,但现在非常多。 我可以最小化所有的窗户,它没有帮助。 CPU基本上什么都不做......
有什么想法吗?
更新
不,这些是不同的机器,但它们运行相同的硬件。 2.没有使用线程,这是一个非常老的(20岁)普通的DOS应用程序,在win32中编译。它应该计算迭代直到它们相遇,消耗所有它。我的印象 - VISTA只是没有给它更多的CPU
答案 0 :(得分:2)
您是否尝试将控制台输出重定向到文件? 如果您的应用程序被阻止写入控制台(有时不幸发生这种情况),那么重定向输出应该会有所帮助,因为写入简单文件比写入控制台要快得多。
你这样做
c:\temp> dir > output.log
如果您真的根本不关心输出,可以通过重定向到nul
将其丢弃。例如:
c:\temp> dir > nul
答案 1 :(得分:2)
Vista中有known "feature"将某些控制台应用程序限制为32MB RAM。我不知道Compaq Visual Fortran编译的那些是否会受到这个“功能”的影响。
This article似乎最近已于2008年10月更新,因此问题仍然存在。
答案 2 :(得分:1)
要阐述Daok的帖子 - 您的XP机器可能受此CPU限制,而vista机器受其他资源约束。
澄清: 输出到stdout(或其他)可能会减慢处理速度。 (可以进行上下文切换或文件访问等)
答案 3 :(得分:1)
Tim暗示,控制台输出(stdout)非常昂贵。
我建议在将控制台输出重定向到每个进程的单独日志文件时重新运行测试。如果可能,请在另一次测试运行中调低输出的详细程度。
除此之外,还有其他明显的可能性:硬件是否存在显着差异,是否有其他主要进程在运行,是否存在争用的共享资源?
除了显而易见之外,寻找非显而易见的资源争用,例如共享文件。
但我要看的主要区域是两个操作系统环境中编译代码的方式是否存在显着差异 - 我想知道你的Fortran代码在Vista上运行时是否会产生某种特殊的惩罚,例如作为兼容模式。看看Vista的支持情况以及是否可以专门针对Vista进行编译。还要查找报告类似问题的任何人,例如错误报告,功能请求等。
答案 4 :(得分:1)
你的循环显然不是简单的计算。那里有一个阻塞系统调用。仅仅因为它在XP上运行并不意味着该应用程序没有错误。
由于您可以最小化控制台窗口并且看不到任何改进,我不会认为这是一个问题。根据我的经验,只有在控制台窗口正在绘制文本时,控制台输出才会减慢程序的速度,而不是在最小化时。
答案 5 :(得分:0)
Vista和XP上的机器硬件是否相同?它可能只使用Vista的10%,因为它不需要更多。你在使用Thread吗?我认为它需要有关您的项目的更多信息才能有更好的主意。您是否尝试使用分析器查看发生了什么?