Я согласен с последним ответом. Производительность довольно плохая.
Недавно моя команда программистов завершила преобразование симуляции из стандартного C ++ в C ++ / CLI. Под C ++ у нас был рукописный механизм персистентности, который работал достаточно хорошо. Мы решили использовать механизм сериализации, а не переписывать старый механизм персистентности.
Старая симуляция с объемом памяти от 1/2 до 1 гигабайта и большинством объектов, имеющих указатели на другие объекты и тысячи объектов во время выполнения, сохранялась бы в двоичном файле размером от 10 до 15 мегабайт в течение минуты. Восстановление из файла было сопоставимо.
При использовании одних и тех же файлов данных (работающих бок о бок) производительность C ++ / CLI в два раза выше, чем в C ++, пока мы не выполним постоянство (сериализация в новой версии). Запись занимает от 3 до 5 минут, чтение занимает от 10 до 20. Размер файла сериализованных файлов примерно в 5 раз превышает размер старых файлов,
В основном мы видим 19-кратное увеличение времени чтения и 5-кратное увеличение времени записи. Это недопустимо, и мы ищем способы исправить это.
При изучении двоичных файлов я обнаружил несколько вещей: 1. Тип и данные сборки записаны в виде открытого текста для всех типов. Это космически неэффективно. 2. Каждый объект / экземпляр каждого типа имеет записанную раздутую информацию о типе / сборке. Одна вещь, которую мы сделали в нашем механизме персистентности, это выписала таблицу известных типов. Когда мы обнаружили типы в письменном виде, мы рассмотрели их существование в этой таблице. Если он не существует, создается запись с информацией о типе и назначенным индексом. Затем мы передали тип infor как целое число. (тип, данные, тип, данные) Этот «трюк» значительно сократит размер. Это может потребовать повторного прохождения данных, однако процесс «на лету» можно было бы развить, причем в дополнение к добавлению его в таблицу, отправке в поток, если бы мы могли гарантировать порядок восстановления из потока .
Я надеялся повторно реализовать часть сериализации ядра, чтобы оптимизировать его таким образом, но, увы, классы запечатаны! Возможно, мы еще найдем способ его собрать.