2012-03-28 166 views
2

我想知道是否有任何方法可以控制excel計算,例如WB中的幾張紙並行重新計算,而其他的不是。我的問題是,在目前的設置下,我的順序計算過程耗時太長。這個序列是從VBA驅動的,如下所示: 1)vba調用一個插件(excel-dna vb.net插件,它控制數據讀取器和附加數據庫) 2)插件將數據返回到表格1。按順序重新計算(第2頁,然後是第3頁) 3)第4頁到第10頁按順序重新計算,但由於每個頁面獨立地只與頁面2相連,所以理論上可以重新計算 - 但如何做到這一點? 4)再次通過1)中描述的通過vba插件調用新數據開始處理excel中的多線程計算很慢

在我的筆記本電腦上運行數據子集(64位,32位excel,英特爾i7)需要54.6秒。有趣的是,如果我關閉多線程,它需要25.8秒!更重要的是,如果我在超高速機器上運行它(2 x Intel Xeon X5570,四核「Nehalem」架構,64位64位excel),它比我的筆記本電腦要慢,需要多線程處理230秒或不處理26秒。

我想知道是否有更好的方法可以利用多核和多線程。緩慢的位似乎是優秀的重新計算,而不是外加速度。任何建議感激。

編輯: 上面的描述有點簡化 - 實際上,我還有一個反覆的'calc/paste-vales/recalc'過程,它在每張表4-10上運行(迭代繼續進行直到一些達到所需的靈敏度,然後才計算整張紙)。我相信這使得在當前設計下運行wb計算是行不通的。

表4-10是相同的(硬編碼輸入參數除外)並且彼此之間沒有計算依賴關係。如果每個計算過程(提到的迭代過程和表格計算)可以並行而不是順序完成,我認爲整個過程會更快。我已經進行了更爲明顯的精簡和測試(分解公式,分離易失性函數等)。

在整個過程中運行我的整個數據集大約需要16個小時,這就是爲什麼我想找到一些方法來改善這一點。

謝謝!

回答

2
  • 下面是閱讀Excel計算性能的一個很好的開始:http://www.decisionmodels.com/calcsecretsc.htm

  • 您可以使用像[ExcelFunction(IsThreadSafe = true)]這樣的屬性將Excel-DNA函數標記爲線程安全,儘管這聽起來不像這裏的瓶頸。這將允許這些功能同時進行評估。

  • 如果您的i7處理器具有超線程(因此它向Windows報告4個內核,但實際上只有兩個實際內核),那麼將Excel線程數設置爲內核數可以更快(例如2 )而不是處理器可以運行的線程數(這可能是Excel的默認值 - 也許是4)。

+0

嗨戈弗特。這個excel-dna和dotnet datareader方面看起來非常有效。在任何情況下,我都會根據您的建議對數據子集運行微時間測試: 關閉多線程(28.3);在+ 1線程(30.3); + 2線程(70.8);所有可用的處理器(65.1)。切換IsExceptionSafe = True並且IsThreadSafe = True沒有引起顯着差異(錯誤和兩者均爲28.3sec)。我想知道,如果每個工作表的recalc命令是從excel-dna插件發送的,如果它可能以某種方式變得更快?例如vba運行excel-dna插件,然後發送sheet recalc命令。 – Yugmorf 2012-03-30 05:31:55

+0

這裏有一些最近關於Excel-DNA的性能討論和結果:http://groups.google.com/group/exceldna/browse_frm/thread/e331337fcdc22a17。這似乎表明調用工作表通過COM和C API計算並沒有什麼區別。 – Govert 2012-03-30 07:48:21

+0

謝謝。重新進行前面的討論。我只注意到使用Threadsafe產生的結果:= True和多線程計算產生了虛假結果。我想我的應用程序是不是線程安全的... – Yugmorf 2012-03-30 09:44:25

1

它對於多線程計算比單線程計算慢是非常不尋常的。

想必您已將計算切換爲手動。

您是否在每張紙上使用Sheet.Calculate來「按順序計算工作表」?如果是這樣,使用Application.Calculate可能會更快,並讓Excel自動計算重新計算所有工作表的最快方法。

+1

嗨,查爾斯,我讀過你的博客的計算速度,並有一些使用你的工作在過去。謝謝。 你是對的 - 我已將計算設置爲手動並控制VBA的計算順序;調用excel-dna插件,將數據加載到第一個工作表中,然後按順序計算後續工作表; sheet(「Sheet2」)。calculate,sheets(「Sheet3」)。calculate等。 請看我上面的編輯,它給出了更多的細節。 – Yugmorf 2012-03-30 02:41:53

+0

爲什麼不能同時迭代所有工作表4-10? – 2012-03-30 10:09:44

+0

是的,我非常想在同一時間迭代/計算紙張4-10(=平行)。但我不知道這是如何,除非我運行Excel的單獨實例。如果你知道其中一個,有興趣聽到另一種方式 - 這將真正解決我的問題的實質。 – Yugmorf 2012-04-03 12:16:51