Я оценивающих различные методы межпроцессного связи для нескольких .NET 2.0 процессов, проживающих на той же машине. Естественно, .NET Remoting является кандидатом, и теоретически самой быстрой конфигурацией должен быть IpcChannel (именованные каналы) + BinaryFormatter.Когда сообщения становятся больше, IpcChannel Remoting становится медленнее
Мои тесты действительно показывают, что 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 MB BLOB вокруг, и мне бы хотелось, чтобы вам не приходилось иметь дело с файлами с разделяемой памятью/памятью. Кроме того, я не могу позволить себе записывать их на диск (гораздо медленнее).
Следующий метод был использован для контрольных показателей (называемых многократно, измеряется общее время, разделить общий размер полезной нагрузки от общего времени).
private byte[] _bytes = null;
public byte[] HelloWorld(long size)
{
if (_bytes == null || _bytes.Length != size)
_bytes = new byte[size];
return _bytes;
}
Просто мысль, подтвердили ли вы, что с большими полезными нагрузками сообщения НЕ будут кэшироваться на диск где-нибудь? Вот почему я спрашиваю: IIS 7 автоматически замалчивает большие запросы на диск, чтобы не потреблять слишком много ОЗУ ... Мне интересно, реализует ли либо .Net, либо Windows аналогичное поведение, и когда размер сообщения увеличивается, происходит сбой в скрытом диске , Если не диск i/o, мое следующее предположение будет размером блока сообщения. – 2010-12-12 18:18:49
@ Тим: У меня нет. Предполагая, что я узнаю, что это связано с скрытым дисковым вводом/выводом, есть ли что-нибудь, что я могу на самом деле сделать? например перенастроить Remoting или IpcChannel, чтобы вести себя по-другому? – 2010-12-13 08:22:22
@Yodan - Я не знаю, как уменьшить кэширование скрытых дисков, но может иметь какое-то отношение к тому, сколько ОЗУ выделено для рассматриваемого процесса (ов). Рассматривали ли вы потребление ресурсов на машине при повторной отправке больших сообщений? Даже с очень большими файлами (я пытался с 500 МБ +) чистое управление потоком (например, передача данных из одного процесса в другой) приводит к очень малому потреблению памяти и отсутствию дискового ввода-вывода. Поэтому, если вы видите пики RAM/disk (особенно если вы видите различия между TCP и IPC), это может дать вам указание на то, что происходит. – 2010-12-13 16:09:55