Может ли использование обнуляемых структур улучшить производительность?

1

Я думал следующее:

Поскольку структуры могут улучшить производительность GC, а Nullable<T> - это сама структура, было бы лучше с точки зрения производительности (производительность GC или вообще) использовать NULL-структуру вместо класса?

У кого-нибудь есть опыт?

РЕДАКТИРОВАТЬ:

Например: я думал больше о создании класса/структуры параметров для вызова метода: ConvertToPdf(..., MyType options). Итак, не лишние огромные структуры со многими методами или что-то в этом роде.

Теги:
performance
struct
garbage-collection

3 ответа

4
Лучший ответ

Нет.

structs являющиеся основой для типов значений, должны оставаться небольшими. Классы обычно не остаются малыми, и поэтому, заменяя все виды использования класса для struct вы будете создавать на самом деле более медленные скорости выполнения.. поскольку типы значений копируются полностью.

  • 0
    Ты прав. Но если мы предположим, что они не являются огромными структурами и что они не слишком скопированы? Например, я думал о создании класса / структуры параметров для вызова метода: ConvertToPdf(....., MyType options)
  • 1
    @ user2173353 Тип, который является маленьким и создается очень часто, может быть хорошим кандидатом для типа значения. Но 1) не беспокойтесь об этом, если производительность действительно не критична, и 2) если вы решите попробовать, измерьте его, чтобы увидеть, есть ли какое-то реальное повышение производительности !!
Показать ещё 1 комментарий
1

Структура семантически эквивалентна совокупности переменных, склеенных вместе с клейкой лентой. Если бы нужно было создать структуру

public struct MaybeValid<T>
{
  public T Value;
  public bool IsValid;
}

то поле Value переменной MaybeValid<T> может работать так же эффективно, как и переменная типа T Однако Framework Nullable<T> не определен таким образом. Следовательно, часто необходимо скопировать Value Nullable<T> в какую-либо другую переменную, прежде чем с ней можно будет сделать что-либо. Дополнительные уровни копирования, требуемые при использовании Nullable<T> означают, что используемый с ним код, как правило, не будет столь же эффективным, как и код с использованием других типов.

0

Преждевременная оптомизация! - учитывая, что это возможно, поскольку вы не получаете бокса напрямую, так как вы его обертываете в класс, вы можете сделать его равным нулю. Предполагая, конечно, что использование структуры подходит - вы, как правило, видите много классов с очень небольшим количеством членов, это может быть целью. Но вы не хотите оплотизировать так, пока не знаете, что вам нужно, потому что вы всего лишь смертный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню