У меня есть тип, который я рассматриваю как структуру.
Но проблема в том, что у него 6 полей типа int.
Итак, какое решение я должен использовать для этого типа?
РЕДАКТИРОВАТЬ
Размер структуры с 6 целочисленными полями составляет 24 байта, что огромно для передачи. Рекомендуемый размер структуры не более 16 байт.
Будущим читателям было бы полезно, если бы вы могли включить в вопрос, почему 6 полей int являются проблемой. Возможно, это общеизвестно для пользователей C#, но для меня это не очевидно.
@Software Monkey: это треугольник. Поля: sideA, sideB, sideC, size, seed1, seed2.
@slim: Спасибо. Я отредактировал свой вопрос.
Простите мой опыт работы с C и незнание C#, но разве вы не передаете ответ по ссылке?
@slim: в C# мы обычно передаем по значению.
В C также обычно используется значение. Но чтобы избежать копирования больших объемов данных, вы передаете указатели.
@slim: да, тонкий, но при использовании указателей в C# мы должны отмечать методы как небезопасные, что не поощряется в C#.
На самом деле это просто соглашение о передаче по значению. Передача по ссылке требует использования ключевого слова ref на каждом сайте вызова; таким образом, дизайн языка настоятельно поощряет передачу по значению. Накладные расходы на объект составляют 8 байтов, поэтому, если ваш тип составляет 24 байта, почти всегда лучше просто заплатить 25% накладных расходов.





Не видя своей структуры, сложно сказать что-либо однозначно. Но я подозреваю, что вам следует оставить это как структуру.
Как насчет WriteOnce<int[]>?
@ Дмитрий Нестерук: не могли бы вы объяснить?
Это смотря как вы собираетесь его использовать?
Трудно ответить только на основании информации, которую вы указали в своем вопросе.
1. Передавать участок 2. Не использовать сторонний код 3. Нет 4. Нет
Мне кажется, что класс - это, вероятно, правильный выбор для вас. В основном это основано на вашем ответе на вопросы №1 и №3.
Остерегайтесь бокса. Если ваша структура будет использоваться методом, который ожидает объект, она будет принудительно преобразована в объект, и у вас будет потенциальное снижение производительности.
Вот Справка, который объясняет это более подробно.
Я бы сделал это занятием (№2), и тогда вам не пришлось бы об этом беспокоиться.
Использование массива из шести целых чисел (# 3), вероятно, затруднит чтение вашего кода. Класс с описательными идентификаторами для каждого int был бы намного лучше.
В общем, при хранении более двух частей связанных данных мне нравится создавать класс, который связывает их вместе. Особенно, если я буду передавать их как единое целое.
Думаю, вы упустили суть вопроса - дело не в том, нужно ли держать их вместе, а в том, использовать ли структуру или класс.
Я бы посоветовал написать небольшой тест для измерения производительности различных опций, это единственный способ узнать наверняка. Вы можете быть удивлены результатами (я часто удивляюсь).
(Я предполагаю, что вас беспокоит производительность.)
Если держатель данных будет неизменным, вопрос о структуре и классе, скорее всего, будет зависеть от среднего количества ссылок, которые будут существовать для каждого экземпляра. Если у кого-то есть массив TwentyFourByteStruct [1000], этот массив займет 24 000 байтов, независимо от того, содержит ли каждый элемент другое значение, все элементы содержат одно и то же значение или что-то среднее. Если у кого-то есть массив TwentyFourByteClass [1000], этот массив будет занимать 4000 или 8000 байтов (для 32/64-битных систем), и каждый отдельный экземпляр TwentyFourByteClass, который создается, займет около 48 байтов. Если все элементы массива содержат ссылку на один и тот же объект TwentyFourByteClass, общее количество будет равно 4048 или 8048 байтам. Если все элементы массива содержат ссылки на разные объекты TwentyFourByteClass, общий размер будет 52 000 или 56 000 байт.
Что касается производительности во время выполнения, лучшая производительность, которую вы можете получить, как правило, связана с передачей структур по ссылке. Передача структур по значению потребует их копирования, что может оказаться дорогостоящим для структур размером более 16 байт (.net включает оптимизацию для структур размером 16 байт или меньше), но стоимость типа значения по ссылке одинакова, будь то 1 байт или 16000 байт.
Не могли бы вы предоставить дополнительную информацию.