【问题标题】:What is the fastest and easiest way to communicate between 2 processes in C#? [duplicate]在 C# 中的 2 个进程之间进行通信的最快和最简单的方法是什么? [复制]
【发布时间】:2014-07-12 15:14:29
【问题描述】:

从我的主 c# 应用程序中,我使用 Process.Start 方法启动许多从属进程。 (在同一台电脑上)

就在启动这些从属进程之前,我在 XML 文件 中序列化了一些数据(我已经序列化了类),这些数据在 Process 类的参数中传递。

在每个从属进程中,这些数据被反序列化并完成计算。对 XML 进行了新的序列化,以便将结果发送到主进程。

我的应用程序可以运行,但性能很差。 序列化/反序列化操作的时间太长,因为每个XML文件的大小约为1,5 Mo...

我真的需要一个高性能的主应用程序和从属进程之间的简单通信。

如何轻松修改代码以提高性能? 注意:将来我的主进程将是 64 位,从属进程是 32 位。

我听说有些应用程序允许在 RAM 中虚拟化硬盘?它存在吗?是免费的吗?

我听说过 WCF、命名管道、内存映射等,但我似乎很重用......?

【问题讨论】:

  • stackoverflow.com/questions/2635272/… try n check out...将对您有所帮助。谢谢>!
  • 你能给我们看一些代码吗?
  • 那么你想要最快的还是最简单的方法?
  • 如果性能是关键,您为什么要使用许多进程来执行此操作?鉴于进程在同一台机器上运行,为什么不使用具有多个线程的单个进程呢?

标签: c# xml serialization deserialization ipc


【解决方案1】:

使用SlimSerializer 从这里: https://github.com/aumcode/nfx/tree/master/Source/NFX/Serialization/Slim

单个线程上每秒数十万个序列化事务 - 这是针对“典型的人”对象(姓名、地址、联系信息、薪水)

还有see this post about Glue

Glue 专为非常高效地“粘合”过程而设计

Video

Another Video (In Russian)

【讨论】:

    【解决方案2】:

    内存映射文件 (MMF) 是最快的方法。但是,正如您所指出的,问题在于序列化而不是传输本身。任何传输都需要序列化,即使是 MMF(最简单的情况除外,即您有可以在内存中按顺序排列的简单数据记录)。 XML 并不快——任何类型的二进制序列化都会工作得更好。

    【讨论】:

    • 确实如此。使用简单的 BinaryWriter 可能是最快的方法。
    猜你喜欢
    • 2010-10-06
    • 2018-05-31
    • 2010-12-20
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2011-11-06
    • 2018-05-31
    相关资源
    最近更新 更多