Я разрабатываю игру, используя XNA и С#, и пытался избежать вызова типа new struct()
кода каждого кадра, поскольку я думал, что это выдохнет GC. "Но подождите, - сказал я себе, - структура - это тип значения. GC не следует так звонить, верно?" Ну, вот почему я спрашиваю здесь.
У меня есть очень смутное представление о том, что происходит с ценностями. Если я создаю новую структуру внутри вызова функции, создается ли структура в стеке? Будет ли это просто толкнуть и выскочить, а производительность не будет хитом? Кроме того, будет ли какой-либо предел памяти или последствия для производительности, если, скажем, мне нужно создать много экземпляров в одном вызове?
Возьмем, например, этот код:
spriteBatch.Draw(tex, new Rectangle(x, y, width, height), Color.White);
Прямоугольник в этом случае является структурой. Что происходит, когда создается новый Rectangle? Каковы последствия повторения этой строки много раз (скажем, тысячи раз)? Создан ли этот прямоугольник, копия, отправленная методу Draw, и затем отбрасывается (что означает, что память не будет съедена, чем больше Draw вызывается таким образом в той же функции)?
P.S. Я знаю, что это может быть предварительная оптимизация, но я в основном любопытен и хочу лучше понять, что происходит.