2012-03-20 46 views
0

我有一個包含兩個AppDomain的應用程序。其中一個AppDomain動態加載執行一些計算並生成大量輸出數據(存儲在EntityFramework EntityObject中)的DLL。在應用程序域之間移動大量數據

到目前爲止,當它調用適當的方法時,我剛剛將這個EntityObject「返回」到另一個AppDomain。當然,實際上,這是序列化EntityObject及其所有數據。隨着此對象數據量的增長,此過程已成爲應用程序中的一個巨大瓶頸(有時需要分鐘來序列化和反序列化)。

我在另一個StackOverflow文章中看到,MemoryMappedFile可能是一個解決方案,但我不確定以這種方式序列化和反序列化對象的語義,即使這是最佳解決方案。我也在其他地方看到,包裝在ObjectHandle中的應用程序允許數據在內存中共享,但在嘗試時卻不起作用。

感謝您的任何幫助。

回答

1

由於this answer暗示,序列化/反序列化通常不能避免沒有大量的重構。如果你的瓶頸是I/O,內存映射文件可以提供幫助。但是,如果瓶頸是CPU花費的序列化和反序列化時間,則嘗試使用更快的序列化方法,例如Protobuf.Net

+0

如何使用此序列化程序跨AppDomain移動數據?你有一個例子嗎? – MgSam 2012-03-21 14:09:59

+0

我知道這是舊的,但這裏是關於這個問題的新景點。嘗試使用WCF服務或deplaticated MarshalByObjectRef。在WCF的情況下,您可能會使用具有雙向通信的命名管道服務/客戶端端點配置(我假定您希望保留同步對象)......另一方面,爲保持向後兼容性而保留MarshalByObjectRef,並且沒有任何錯誤繼續使用它,我懷疑它會從任何新的.NET框架中刪除。 WCF命名管道示例http://goo.gl/vEo74e和MarshalByRef http://goo.gl/JdJViR – 2013-08-03 14:39:53

相關問題