У меня в моем коде ConcurrentBag<Point3DCollection>
.Сериализация ConcurrentBag XAML
Я пытаюсь выяснить, как их сериализовать. Конечно, я мог бы перебирать или упаковывать его с помощью класса модели поставщика, но мне интересно, если это уже сделано.
Сам по себе потенциально довольно большой и может быть сжат, чтобы ускорить чтение и запись на диск и с диска, но время отклика, которое мне нужно для этого, в основном в масштабе пользовательского интерфейса. Другими словами, I предпочитает двоичное форматирование по форматированию XAML-текста по соображениям производительности. (Существует хороший сериализатор XAML-текста, который является частью Helix 3D CodeProject, но он медленнее, чем мне хотелось бы.)
Это прецедент, когда я оставил свой собственный сериализатор или там что-то уже упаковано для такого рода данных?
Я думаю, что это очень спорно. Point3D - 3 двойных значения. Двойной длиной 8 байтов, поэтому двоичный сериализованный Point3D равен 24 байтам. Многие двойные значения, созданные людьми (или даже Blend), используемые в XAML, могут быть закорочены, чем сериализованные как строка (я предполагаю, что вы напишете их как ANSI, а не UNICODE). Если это не так, это означает, что сжатие будет бесполезным, поскольку энтропия списка двоичных сериализованных двойных значений в этом случае будет высокой. Я предлагаю вам просто петлю над сумкой и использовать готовый класс Point3DCollectionConverter (метод ConvertTo). –
@SimonMourier, значения, как правило, генерируются системами САПР, поэтому строки ANSI с двойной точностью будут намного длиннее 8 байтов. Но ваша благодарность Point3DCollectionConverter - это возможный ответ. Не могли бы вы написать это как ответ, разрешив мне присуждать премию и т. Д.? –
Для большого количества данных, почему бы вам не рассмотреть Sqlite и т. Д., Которые могут хранить структурированные данные в файле. Я видел много 3d-программ, использующих базу данных для хранения структуры вместе с отношениями, которые позволяют им частично вставлять/обновлять/удалять данные. Преимущество Sqlite заключается в том, что вы можете использовать многопоточную сериализацию для повышения скорости, однако вам нужно немного поработать над sqlite, чтобы включить многопоточное SQL-соединение, или же вы можете использовать LocalDB SQL Express или даже Sql Compact. –