2010-05-31 82 views
2

我有一个处理多处理器系统时遇到问题的应用程序。这不是一个应用程序,我对修改有特别的感情,如果可能,我想避免它。不过,如果必须修改代码,我并不在上面。该应用程序是用VBA编写的(因此我倾向于避免触摸它)。如何指定处理器亲和力?

我们注意到,应用程序似乎如果我们使用任务管理器中的处理器关系设置为单个处理器,只有当没有设置处理器亲和力表现不稳定相当顺利运行。

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

另一个问题是:它实际上有可能修改核心VBA产品来处理其自己的处理器亲和力?我从来不需要在本地处理任何应用程序,所以此时(此时)完全超出了我的专业领域。

在此先感谢

+0

我很想知道,当没有设置处理器亲和力你看到的问题。这些问题如何体现出来? – 2010-06-01 13:32:10

+0

@Gary McGill:我们看到的问题(使用Access 2003编写的应用程序 - 并且在Access 2007/2010中不起作用)是应用程序崩溃和一般Access不稳定。该应用程序最初是在单CPU /单核机器上编写的,现在我们正在替换问题。该应用程序在多CPU和多核机器上具有各种不稳定性,但在旧机器上仍可正常工作。当我们设置处理器亲和力时,不稳定性不再是问题。该应用程序正在被重写,但在完成之前,我们被困在一块岩石和一个困难的地方。 – BenAlabaster 2010-06-02 16:16:18

+0

您是否在VBA应用程序中使用多个线程?如果将多线程应用程序限制为单个处理器可以提高性能,那通常表示存在虚假缓存问题 – 2010-06-24 20:51:42

回答

2

的一种方法是用Windows Application Compatibility Toolkit

你给它一个方法来识别您的应用程序(例如,通过.EXE位置),然后它允许你指定一个号码调整的。处理器亲和力就是其中之一。它会创建一个数据库来保存所有的调整。

这是每台机器,所以它不是一个广泛分布的应用提供了良好的解决方案,但如果这个应用程序只需要一台机器上运行,它会为你节省不必更改代码。

+1

另外,请注意,默认情况下,版本号是其选择的用于识别应用程序的项目之一。如果您定期更新更新版本号,则可能需要取消选中该标准,否则您的下一次升级将会停止。 – 2010-05-31 18:19:01

2

你可以使用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

+0

我们的I.T.经理发现这个黑客制作的应用程序无法很好地处理多核/多处理器环境。它。正在测试如果修改处理器亲和力会稳定应用程序。如果是,那么它将是I.T.倡议。我被要求从发展的角度提供意见。 – BenAlabaster 2010-05-31 17:12:23