1

我有一个 Win32 控制台应用程序,它正在执行一些计算,在 Compaq Visual Fortran 中编译(这可能无关紧要)。

我需要同时运行很多。

在 XP 中,它们一起占用大约 90-100% 的 CPU,工作速度非常快。在 Vista 中,无论我运行多少个,它们占用的 CPU 都不会超过 10%(一起),并且分别运行得很慢。

有相当多的控制台输出正在进行,但现在非常多。我可以最小化所有的窗口,它没有帮助。CPU基本上什么都不做...

有任何想法吗?

更新:

不,这些是不同的机器,但它们运行相对相同的硬件。2. 不使用线程,这是一个非常古老(20 年)的 DOS 普通应用程序,在 win32 中编译。它应该计算迭代直到它们相遇,消耗它所拥有的一切。我的印象 - VISTA 只是没有给它更多的 CPU

4

6 回答 6

2

您是否尝试过将控制台输出重定向到文件?如果您的应用程序被阻止写入控制台(不幸的是有时会发生这种情况),那么重定向输出应该会有所帮助,因为写入简单文件比写入控制台要快得多。

你这样做

c:\temp> dir > output.log

如果您真的根本不关心输出,可以通过重定向到nul. 例如:

c:\temp> dir > nul
于 2008-11-17T19:58:52.540 回答
2

Vista 中有一个已知的“功能”,它将某些控制台应用程序的 RAM 限制为 32MB。不知道 Compaq Visual Fortran 编译的那些会不会受到这个“特性”的影响。

这篇文章似乎在 2008 年 10 月才更新,所以问题仍然存在。

于 2008-11-17T20:05:50.293 回答
1

Your loops are obviously not simple computations. There is a blocking system call in there somewhere. Just because it worked on XP doesn't mean the app is bug free.

Since you can minimize the console windows and see no improvement, I would not consider that an issue. In my experience console output slows a program down only if the console window is drawing text, not when it's minimized.

于 2009-02-26T23:24:11.053 回答
1

正如 Tim 暗示的那样,控制台输出(stdout)非常昂贵。

我建议重新运行您的测试,同时将控制台输出重定向到每个进程的单独日志文件。如果可能,在另一个测试运行中调低输出的详细程度。

除此之外,还有其他明显的可能性:硬件是否明显不同,是否有其他主要进程正在运行,是否存在正在争用的共享资源?

除了明显的,寻找不明显的资源争用,例如共享文件。

但是我要看的主要领域是您的代码为两种操作系统环境编译的方式是否存在显着差异-我想知道您的 Fortran 代码在 Vista 上运行时是否会受到某种特殊惩罚,例如兼容性模式。查看对 Vista 的支持情况以及是否可以专门针对 Vista 进行编译。还要寻找任何报告类似问题的人,例如错误报告、功能请求等。

于 2008-11-17T20:01:11.020 回答
1

为了解释 Daok 的帖子——你的 XP 机器可能是这个进程的 CPU 绑定,而 vista 机器受其他一些资源的约束。

澄清一下:输出到标准输出(或其他)可能会减慢处理速度。(上下文切换或文件访问等也可以)

于 2008-11-17T19:17:27.457 回答
0

您的 Vista 和 XP 上的机器硬件是否相同?它可能只使用 Vista 的 10%,因为它不需要更多。你在用线程吗?我认为它需要有关您的项目的更多信息才能有更好的想法。您是否尝试使用分析器来查看发生了什么?

于 2008-11-17T19:14:50.707 回答