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