我需要将C#内存对象从一个进程传递到另一个进程(IPC)
我刚刚尝试在文件中序列化此对象,然后在第二个进程中使用二进制序列化( BinaryFormatter )对其进行反序列化,以获得良好的性能。
不幸的是,性能达不到我的预期。 由于我的对象有很多信息,序列化和反序列化需要花费太多时间(我的对象序列化在我的硬盘上需要超过1MB)。
我听说过
内存映射文件(MMF)
这似乎是IPC最快的方法之一,当进程之间共享的对象很简单时。 What is the fastest and easiest way to communicate between 2 processes in C#?
我的对象只是这样的简单嵌套结构:
public struct Library
{
public Book[] books;
public string name;
}
public struct Book
{
public decimal price;
public string title;
public string author;
}
=> 是否可以避免序列化/反序列化并与MMF共享此类对象?
=> 共享对象的特征应该是什么,以避免这些sérialization/ deserialization操作?
另一个约束: 我的第一个进程是一个C#64位进程,我的第二个进程是32位进程。
谢谢
答案 0 :(得分:4)
您无法使用C#直接在内存映射文件中分配对象(保留在安全代码中)。因此,这意味着您需要进行某种序列化以在两个应用程序之间传输数据。
广泛的选择:
我个人选择3,因为如果适用于特定问题,它将提供最可靠和类型安全的收益。
答案 1 :(得分:0)
是否可以避免序列化/反序列化并共享此内容 MMF的那种对象?
使用function foo1() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
console.log(args);
}
语句迭代var/foreach
项的元素,并通过创建视图访问器将它们写入MMF。
示例:
Book[]