Ну, C # - странный зверь, когда речь идет о части производительности struct vs classes.
Проверьте эту ссылку: http://msdn.microsoft.com/en-us/library/y23b5415(VS.71).aspx
Согласно Microsoft вы должны использовать структуру только тогда, когда размер экземпляра меньше 16 байт. Андрей прав. Если вы не передадите структуру, вы можете увидеть выигрыш в производительности. Семантика типа значения имеет высокую производительность (и временную память, в зависимости от того, что вы делаете), теряя при передаче их.
Что касается коллекций, то если вы используете неуниверсальную коллекцию, бокс и распаковка типа значения (в данном случае struct) будут иметь более высокие издержки производительности, чем ссылочный тип (то есть класс). Тем не менее, также верно, что структуры распределяются быстрее, чем классы.
Хотя структура и класс имеют один и тот же синтаксис, их поведение сильно отличается. Это может заставить вас совершить много ошибок, которые трудно отследить. Например, статические конструкторы в структуре не будут вызываться, когда вы вызываете ее public (скрытый конструктор) или оператор не будет работать со структурами.
Обнуляемые типы сами по себе реализованы со структурами. Но у них есть штраф. Даже каждая операция типа Nullable выделяет больше IL.
Ну, на мой взгляд, struct хорошо использовать для таких типов, как DateTime или Guids. Если вам нужен неизменный тип, используйте struct в противном случае, не используйте. Преимущества производительности не так велики. Точно так же даже накладные расходы не так велики. Поэтому, в конце концов, это зависит от ваших данных, которые вы храните в структуре, а также от того, как вы их используете.