当消息变大时,IpcChannel Remoting会变慢

Yod*_*ber 9 remoting ipc named-pipes .net-2.0

我正在评估驻留在同一台机器上的几个.NET 2.0进程的各种进程间通信方法.当然,.Net Remoting是候选者,理论上最快的配置应该是IpcChannel(命名管道)+ BinaryFormatter.

我的基准测试确实表明,远程处理IpcChannel可能比TcpChannel更快,但IpcChannel显示吞吐量随着消息变大(大约30 MB)而急剧下降:

Message Size    30 MB       3 MB        300 KB      3 KB
Remoting / TCP  120 MB/s    115.4 MB/s  109.5 MB/s  13.7 MB/s
Remoting / IPC  55 MB/s     223.3 MB/s  218.5 MB/s  20.3 MB/s

有没有人知道为什么,或任何想法如何优化任一渠道的性能?我确实需要传递30 MB的BLOB,并且希望避免必须处理共享内存/内存映射文件.另外,我不能把这些写入磁盘(慢得多).


以下方法用于基准测试(重复调用,测量的总时间,按总时间划分的总有效负载大小).

private byte[] _bytes = null;

public byte[] HelloWorld(long size)
{
    if (_bytes == null || _bytes.Length != size)
        _bytes = new byte[size];
    return _bytes;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*dor 1

插座是一种比共享内存更小但仍然足够强大的枪。执行远程过程时,让它Listen在某个固定或临时端口号上创建一个 ing 套接字,从客户端连接到它,用于NetworkStream将数据从一侧写入另一侧。

我确信它会像魅力一样发挥作用。

这篇文章应该可以帮助您入门。

而且,即使您没有提到必须在单独的计算机上拥有服务器和客户端,您仍然拥有这种能力,如果您使用共享内存,这种能力就会消失。