2012-03-20 40 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

相关问题