Я думал следующее:
Поскольку структуры могут улучшить производительность GC, а Nullable<T>
- это сама структура, было бы лучше с точки зрения производительности (производительность GC или вообще) использовать NULL-структуру вместо класса?
У кого-нибудь есть опыт?
РЕДАКТИРОВАТЬ:
Например: я думал больше о создании класса/структуры параметров для вызова метода: ConvertToPdf(..., MyType options)
. Итак, не лишние огромные структуры со многими методами или что-то в этом роде.
Нет.
structs
являющиеся основой для типов значений, должны оставаться небольшими. Классы обычно не остаются малыми, и поэтому, заменяя все виды использования класса для struct
вы будете создавать на самом деле более медленные скорости выполнения.. поскольку типы значений копируются полностью.
Структура семантически эквивалентна совокупности переменных, склеенных вместе с клейкой лентой. Если бы нужно было создать структуру
public struct MaybeValid<T>
{
public T Value;
public bool IsValid;
}
то поле Value
переменной MaybeValid<T>
может работать так же эффективно, как и переменная типа T
Однако Framework Nullable<T>
не определен таким образом. Следовательно, часто необходимо скопировать Value
Nullable<T>
в какую-либо другую переменную, прежде чем с ней можно будет сделать что-либо. Дополнительные уровни копирования, требуемые при использовании Nullable<T>
означают, что используемый с ним код, как правило, не будет столь же эффективным, как и код с использованием других типов.
Преждевременная оптомизация! - учитывая, что это возможно, поскольку вы не получаете бокса напрямую, так как вы его обертываете в класс, вы можете сделать его равным нулю. Предполагая, конечно, что использование структуры подходит - вы, как правило, видите много классов с очень небольшим количеством членов, это может быть целью. Но вы не хотите оплотизировать так, пока не знаете, что вам нужно, потому что вы всего лишь смертный.
ConvertToPdf(....., MyType options)