2012-01-11 1 views
3

В настоящее время я пишу службу Windows в .NET, и я использую именованные каналы, чтобы другие процессы связывались с моей службой. В более сложных конструкторах NamedPipeServerStream имеется параметр с описательным именем maxNumberOfServerInstances. Потрясающие. Но что это значит?Какова цель maxNumberOfServerInstances в классе NamedPipeServerStream?

документации MSDN является также полезным при объяснении:

Максимальное количество серверных экземпляров, которые разделяют то же имя.

Хорошо. Это все еще не говорит мне, что для меня это значит, или как я его использую. Было бы разумно, если бы NamedPipeServerStream также принял делегата за «запуск этого кода при получении соединения», поэтому каждый «экземпляр сервера» затем запустил этот код. Но это не так.

ответ

2

Это нечетный аргумент, вы найдете более подробную информацию об этом в документации для базового Windows API function (CreateNamedPipe). Трубы используют очень ценный ресурс для буферов труб, они выделяются из пула памяти ядра без загрузки. I думаю Этот аргумент помогает Windows оптимизировать использование пула. Точно, как это делается, безнадежно недокументировано.

Идеальное число для единой службы, которая принимает несколько клиентских подключений: 1. Вы только увеличили бы ее, если хотите запустить несколько служб, которые выполняют одну и ту же работу. Это довольно редко.

+5

Я не думаю, что это совершенно верно. Каждое одновременное клиентское соединение использует исключительно один экземпляр канала: вы не можете подключить несколько клиентов к одному экземпляру канала (а также экземпляр .NET NamedPipeServerStream подключается только к одному клиенту за раз). Таким образом, служба, использующая 1 для этого аргумента, будет сериализовать все его клиентские запросы. Скорее, подумайте об этом как о размере пула соединений - служба захочет установить его на количество действительно одновременных клиентских запросов, с которыми он способен справиться. –

Смежные вопросы