2010-01-05 52 views
2

我試圖在多個AppDomain上並行執行一些邏輯。我這樣做是因爲我正在使用「不可更改」的遺留代碼,並且我想通過並行化某些東西來提高性能。問題是,如果我在1個AppDomain中運行多個實例,它們都依賴於一些靜態數據結構並干擾彼此。加速跨應用程序域通信

我的實現很簡單。我想運行我的「ExecutionHarness」類的多個實例 - 每個實例都在它們自己的AppDomain中 - 因此我創建了一個在每個AppDomain中實例化的類「ExecutionHarnessProxy:MarshalByRefObject」(因爲ExecutionHarness不從MarshalByRefObject繼承)。然後我只是將「ExecutionData [] data」參數傳遞給「ExecutionHarnessProxy.Execute()」方法。這個人然後稱之爲「ExecutionHarness.Execute()」,一切都很好。

我現在的問題是,無論何時將我的數據數組傳遞給代理類,它都需要FOREVER。 ExecutionData類具有[Serializable]屬性,並且在功能上它都可以工作,但我想知道是否有任何方法可以加速它。

  1. 如果我在AppDomain邊界的兩側進行了序列化/反序列化,它會更快嗎?
  2. 這段時間所有的時間都花在做序列化了嗎?還是僅僅是AppDomains之間的序列化數據傳輸?

回答

4

沒有更多的信息很難知道,但從你所描述的,我懷疑ExecutionData陣列是罪魁禍首。

每次調用需要該數據的方法的時候,你會序列數據到AppDomain中,並有可能退了出去爲好。如果這個數組很大,那可能會花費相當多的處理時間。

它會更好,如果該數據能直接在每個AppDomain中被加載,並且只有通過執行結果返回到主AppDomain中。如果您可以避免在AppDomain之間傳遞數據數組,您可能會大大加快此過程。