Из моего основного приложения С# я запускаю много подчиненного процесса с Process.Start
метода Process.Start
. (на том же ПК)
Перед запуском этого подчиненного процесса я сериализую некоторые данные (у меня есть сериализованный класс) в файлах XML, которые передаются в аргументах класса Process.
В каждом подчиненном процессе эти данные десериализуются и вычисляются. Новая сериализация выполняется для XML, чтобы отправить результат в основной процесс.
Мои приложения работают, но производительность очень плохая. Время операции сериализации/десериализации слишком велико, так как размер каждого файла XML составляет около 1,5 Mo...
Мне действительно нужна высокая производительность для этой простой связи между основным приложением и подчиненным процессом.
Как я могу легко изменить свой код, чтобы улучшить эту производительность? Nb: в будущем мой основной процесс будет состоять из 64 бит, а подчиненный процесс - в 32 бита.
Я слышал, что некоторые приложения позволяют виртуализировать жесткий диск в ОЗУ? Он существует? Это бесплатно?
Я слышал о WCF, Named Pipe, Memory Mapped и т.д., Но мне кажется, что это тяжело использовать...?
Файлы с отображением памяти (MMF) - это самый быстрый метод. Проблема, хотя вы указываете, заключается в сериализации, а не в передаче. Сериализация необходима для любого транспорта, даже MMF (за исключением простейших случаев, когда у вас есть простые записи данных, которые могут быть изложены последовательно в памяти). XML не быстрый - двоичная сериализация любого рода будет работать намного лучше.
Используйте SlimSerializer отсюда: https://github.com/aumcode/nfx/tree/master/Source/NFX/Serialization/Slim
сотни тысяч транзакций сериализации на секунду в одном потоке - для объекта "типичный человек" (имя, адрес, контактная информация, зарплата)
Также посмотрите этот пост о Клей
Клей предназначен для "склеивания" процессов вместе очень эффективно