Я хорошо понимаю преимущество option
, но в этом случае я хочу избегать использования option
по соображениям производительности. option
переносит тип в класс, что просто означает больше работы для сборщика мусора - и я хочу избежать этого.
В этом случае, особенно, у меня есть несколько полей, которые все Some
при одинаковых обстоятельствах, но я не хочу помещать их в кортеж, потому что, опять-таки, кортежи являются классами - и создают дополнительную нагрузку на GC. Таким образом, я получаю доступ к field.Value
- что побеждает цель option
.
Поэтому, если не существует оптимизации, о которой я не знаю, из-за которой типы option
будут рассматриваться как потенциально нулевые ссылки, я просто хочу использовать null
. Есть ли способ, которым я могу это сделать?
Редактировать: Чтобы расширить то, что я делаю, я создаю иерархию ограничивающих томов , которая на самом деле представляет собой двоичное дерево с данными только в конечных узлах. Я реализую его как класс, а не как дискриминируемый союз, потому что сохранение неизменяемости элементов не является вариантом по соображениям производительности, и дискриминируемые профсоюзы не могут иметь mutable
членов, только ref
s - снова, добавляя к давлению ГХ.
Как бы глупо это ни было в функциональном языке, я могу просто сделать каждый тип узла наследованием родительского типа Node
. Даункастинг не совсем быстрая операция, но с точки зрения XNA и WP7 почти все лучше, чем злить GC.