代码之家  ›  专栏  ›  技术社区  ›  BenAlabaster

如何指定处理器关联?

  •  2
  • BenAlabaster  · 技术社区  · 14 年前

    我有一个应用程序在处理多处理器系统时遇到一些问题。这不是我特别喜欢修改的应用程序,如果可能的话,我想避免使用它。但是,如果必须修改代码的话,我并不介意。应用程序是用vba编写的(因此我倾向于避免接触它)。

    我们注意到,如果我们使用任务管理器将处理器关联设置为单个处理器,那么应用程序似乎运行得相当顺利,只在没有设置处理器关联时才表现出不稳定性。

    我知道我可以使用.NET指定任务的处理器关联性,因此,我有可能编写一个shell应用程序,该应用程序可用于运行具有指定处理器关联性的旧应用程序,是否有任何人对此有任何经验,并且可以对我可能遇到的头痛提出一些想法奥赫?

    另一个问题是:实际上是否可以修改核心的VBA产品以处理其自身的处理器关联性?我从来没有用我的任何应用程序处理过这个问题,所以这个问题(此时)完全超出了我的专业领域。

    提前谢谢

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ryan Lundy    14 年前

    一种方法是 Windows Application Compatibility Toolkit .

    您为它提供了一种识别应用程序的方法(例如,通过.exe位置),然后它允许您指定一些调整。处理器关联就是其中之一。它创建一个数据库来保存所有的调整。

    它是每台机器的,所以对于广泛分布的应用程序来说,这不是一个好的解决方案,但是如果这个应用程序只需要在一台机器上运行,就可以节省您更改代码的时间。

        2
  •  2
  •   Dirk Vollmar    14 年前

    您可以使用SysInternal PsExec 以某种处理器关联性启动应用程序,例如将访问绑定到CPU 1调用

    psexec.exe -a 1 "%ProgramFiles%\Microsoft Office\Office12\access.exe"
    

    回答你的第二个问题:当你用 访问VBA 我假设您的VBA代码是一个访问解决方案。然后,您的VBA代码将在进程中执行,即您必须修改access.exe进程的处理器关联性。不能单独修改VBA引擎的关联性。

    但是,在指定处理器关联之前,请确保完全了解结果。摆弄这个设置会产生不想要的效果。举一个很好的例子,阅读Raymond Chen的文章:

    Psychic debugging: Why your expensive four-processor machine is ignoring three of its processors