Класс VS ref Struct - PullRequest
       8

Класс VS ref Struct

6 голосов
/ 29 марта 2012

Я программирую игру на C #, поэтому я очень обеспокоен производительностью.

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

Я не хочу копировать данные из соображений производительности (я предполагаю, что передача по ссылке намного быстрее, чем по значению).

Я знаю, что класс всегда передаетсяпо ссылке и что структура передается по значению, но я говорю о передаче структуры по ссылке здесь.

Пример данных, которые я хочу передать:

    public delegate void PathCompleteDelegate(List<PathFinderNode> path);
public struct PathFinderJob{
    public PathCompleteDelegate callback;
    public Vector3 start, end;
    public PathSize unitSize;
    public BoxCollider boxCollider;
}

В предыдущем примере, будет ли использование класса иметь значение?Если так, то какая разница?Будет ли класс быстрее, чем структура в этом примере?Почему?

Спасибо.Жоао Карлос

Ответы [ 2 ]

7 голосов
/ 29 марта 2012

Я знаю, что класс всегда передается по ссылке, а структура передается по значению, но я говорю о передаче структуры по ссылке здесь.

Возможно, у вас правильная идея, но это неверно. Все в C # передается по значению, если вы не используете ключевое слово ref.

Экземпляры класса являются ссылочными типами, экземпляры структуры являются типами значений.

Когда вы передаете тип ссылки по значению, вы передаете копию ссылки (маленькая). Когда вы передаете тип значения по значению, вы передаете копию целых данных (потенциально больших).

У Джона Скита есть хорошее объяснение всего этого здесь .

3 голосов
/ 29 марта 2012

Ваш делегат получает тип ссылки - List, так что вы все равно передаете весь список по ссылке.

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

В любом случае, вы уверены у вас будетпроблема производительности здесь?Похоже, очень преждевременная оптимизация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...