【问题标题】:Win32 console processes in VISTA - 10% CPU, but VERY SLOWVISTA 中的 Win32 控制台进程 - 10% CPU,但非常慢
【发布时间】:2008-11-17 19:06:41
【问题描述】:

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

我需要同时运行很多。

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

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

有什么想法吗?

更新:

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

【问题讨论】:

    标签: winapi windows-vista console cpu


    【解决方案1】:

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

    你这样做是这样的

    c:\temp> dir > output.log
    

    如果你真的完全不关心输出,你可以把它扔掉,重定向到nul。例如:

    c:\temp> dir > nul
    

    【讨论】:

    • 文件写入(嗯,缓存,然后写入)可以比控制台输出更快,这真是太神奇了。
    • 太棒了,但我很确定(没有时间运行基准测试)这是真的 :-)
    【解决方案2】:

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

    This article 似乎在 2008 年 10 月才更新,所以问题仍然存在。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 对 Daok 的帖子发表了评论。关于“绑定” - 有没有办法将 VISTA 与这些流程“绑定”?问题是 - 进程在没有睡眠或任何东西的情况下运行很长的循环。所以他们只是没有得到更多的CPU。但其余的 - 90% CPU - 进入系统空闲!.. :)
      【解决方案4】:

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

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

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

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

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

      【讨论】:

      • 不支持 Vista...20 年前创建的程序 :)...在狭窄的科学环境中使用...感谢您的建议。
      【解决方案5】:

      您的循环显然不是简单的计算。那里有一个阻塞系统调用。仅仅因为它在 XP 上运行并不意味着该应用程序没有错误。

      由于您可以最小化控制台窗口并且看不到任何改进,我不认为这是一个问题。根据我的经验,只有在控制台窗口正在绘制文本时,控制台输出才会减慢程序的速度,而不是在它被最小化时。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 1.不,这些是不同的机器,但它们运行相对相同的硬件。 2. 不使用线程,这是一个非常古老(20 年)的 DOS 普通应用程序,在 win32 中编译。它应该计算迭代,直到它们相遇,消耗它所拥有的一切。我的印象 - VISTA 只是没有给它更多的 CPU..
        • 很遗憾,展示次数无法衡量。
        猜你喜欢
        • 2019-04-22
        • 1970-01-01
        • 2010-09-07
        • 2018-02-12
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 2014-06-09
        • 2015-11-18
        相关资源
        最近更新 更多