2015-11-10 9 views
0

Есть ли лучший способ хранения числовых данных в uint64, кроме использования x цифр для одной части, y цифр для других вещей? (Всего 20 цифр для работы)C# uint64 - Сохранить данные?

Я пытаюсь хранить информацию об объекте, не имея накладных расходов на создание структуры или класса. Мне нужно получить/установить как можно быстрее с минимальными накладными расходами.

+0

Не могли бы вы привести пример этих чисел? –

+2

Трудно понять, что вы имеете в виду для _overhead_. Управление этим гибридом не является накладными расходами? – Steve

+0

Вы можете использовать определенные биты (используя [побитовые операторы] (https://en.wikipedia.org/wiki/Bitwise_operation)) целого числа для хранения информации, но в большинстве случаев, которые я видел, они в основном являются микрооптимизациями и не стоит делать. Можете ли вы привести пример того, что вы будете хранить? –

ответ

3

Итак, насколько я знаю кодирование вокселей. Если вы хотите хранить данные «блоков», которые определены один за другим, вы можете использовать дерево интервалов , где ключ каждого узла является началом прогона, а значение является координатой прогона. Implemntation example.

Кроме того, вы никогда не хранить один блок, как класс, но набор блоков для примера блока 3x3 может быть сделан как:

enter image description here

, как вы видите, я просто закодирована позиция данных 9 блоков в двух битах Это упрощенный метод, для которого размер данных не является проблемой, но быстрая реализация итерации, которая нуждается в формировании какого-либо алгоритма.

Прежде чем начать игру с вокселей прочитать эти

Let's Make a Voxel Engine

Damn, Voxel Data is BIG

Voxel engines are everywhere…

Voxel Engine – Data Storage

Интернет полон ответившим, но это даст информацию, которая тебе нужно. Кроме того, ключевое слово, что я думаю, что вы были mising это VOXEL

+0

Спасибо за ссылки! Я не совсем понимаю дерево, но ссылки помогли. –

1

При использовании uint64 или ulong не является фиксированным требованием, я предлагаю вам использовать BigInteger class. Он был разработан для эффективного хранения произвольно больших чисел.

Эффективно ли это? Если вы декомпилируете код, вы увидите, что они хранят массив битов внутри, чтобы управлять номером. То есть, с N битами, он хранит номер до 2^N - 1.