一尘不染

在AppDomain之间共享数据

c#

我有一个可以包含多个AppDomain的进程。每个AppDomain都会收集一些统计信息。在指定的时间后,我要累积这些统计信息并将其保存到文件中。

一种方法是远程处理,我想避免这种情况。

我唯一想到的另一种技术是将每个AppDomain的数据保存在文件中,并且在特定时间后,其中一个AppDomain会收集所有数据并进行累积。

但是,如果这一切都可以在内存中完成,而无需序列化在AppDomain之间传递的信息的成本,那将是理想的。谁有想法?


阅读 408

收藏
2020-05-19

共1个答案

一尘不染

避免序列化的唯一方法是使用从MarshalByRefObject派生的对象表示数据,但是在那种情况下,您仍然需要跨AppDomain边界进行编组。这也可能涉及重构/重写许多代码。

假设无法通过引用进行编组,那么您将不得不在某些时候进行序列化。根本无法避免。正如Neil
Barnwell所建议的那样,一种方法是使用数据库,另一种方法是使用您自己建议的本地文件。

取决于交付时间轴和/或采用.NET 4.0的另一种可能或可能不可行的方法是使用内存映射文件,请参见.Net Framework
4.0:使用内存映射文件

2020-05-19