2010-05-31 84 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