我想知道是否有任何方法可以控制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個小時,這就是爲什麼我想找到一些方法來改善這一點。
謝謝!
嗨戈弗特。這個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
這裏有一些最近關於Excel-DNA的性能討論和結果:http://groups.google.com/group/exceldna/browse_frm/thread/e331337fcdc22a17。這似乎表明調用工作表通過COM和C API計算並沒有什麼區別。 – Govert 2012-03-30 07:48:21
謝謝。重新進行前面的討論。我只注意到使用Threadsafe產生的結果:= True和多線程計算產生了虛假結果。我想我的應用程序是不是線程安全的... – Yugmorf 2012-03-30 09:44:25