Я оцениваю различные методы межпроцессного взаимодействия для пары .NET 2.0 процессов, находящихся на одной машине .Естественно, .Net Remoting является кандидатом, и теоретически самая быстрая конфигурация должна быть IpcChannel (именованные каналы) + BinaryFormatter.
Мои тесты действительно показывают, что Remoting через IpcChannel в основном может быть быстрее, чем TcpChannel, но IpcChannel показываетРезкое падение пропускной способности при увеличении объема сообщений (около 30 МБ):
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 МБ больших двоичных объектов, и я хотел бы избежать необходимости иметь дело с файлами общей памяти / карты памяти.Кроме того, я не могу позволить себе записать их на диск (намного медленнее).
Следующий метод использовался для эталонных тестов (вызывается повторно, измеряется общее время, делится общее полезная нагрузка размер по общему времени).
private byte[] _bytes = null;
public byte[] HelloWorld(long size)
{
if (_bytes == null || _bytes.Length != size)
_bytes = new byte[size];
return _bytes;
}