2016-01-20 1 views
0

У меня есть программа, которая порождает отдельный дочерний процесс, который выполняет функцию, которая может потенциально запускаться в течение длительного периода времени. Пока выполняется дочерний процесс, в основном потоке (это должен быть основной поток) отображается форма окна, показывающая ход дочернего процесса. Мне нужно настроить IPC, чтобы сообщить текущее состояние процесса дочернего процесса в основном потоке пользовательского интерфейса. Я смог настроить анонимный конвейер, однако было значительное отставание. Есть ли рекомендации для более быстрого метода? Я читал, что использование файлов с памятью может еще больше уменьшить задержку, однако у меня возникают проблемы с настройкой этого.IP-адрес с низкой задержкой между потоком пользовательского интерфейса и дочерним процессом в C#

+0

Это просто не имеет значения, все механизмы IPC работают с одинаковой скоростью. Все они решают одну и ту же проблему, по-разному. Основная операция в принципе одинакова, для нее требуется разделяемая память и переключатель контекста потока. Другие способы удобны, потому что вам не нужно решать проблемы синхронизации, которые требуются вам для сырых MMF. Проблема, которую вы * действительно * не хотите решать. Именованные трубы и локальные шлейфы со штекером тоже прекрасны. .NET добавляет удаленный доступ и WCF. Если вы заметили отставание от * только * отчетности прогресса, то вы делаете это неправильно. –

+0

Вам нужно использовать отдельный процесс? Не можете ли вы использовать рабочие потоки в своем основном процессе? – PoweredByOrange

+0

Я бы хотел, чтобы это было и в отдельной теме, но это невозможно из-за проблем с устойчивостью – user2481095

ответ

1

Вы пробовали установить размеры буфера на 0 и/или промыть трубу после записи?

+0

Вы говорите об анонимном трубе? Нет, я не думаю, что сделал это. Это всегда необходимо делать? – user2481095

+0

хорошо, чтобы повысить пропускную способность, он, вероятно, будет буферизован (меньше переключателей контекста), так как низкая латентность не всегда важна. Когда латентность важна, удалите буфер или создайте флеш. – user3366405

+0

В случае, если кто-то задается вопросом, я снова попытался использовать анонимный канал, убедившись, что вы когда-либо писали трубку, и это помогло улучшить латентность. – user2481095