В .NET обсуждать особо нечего, так как не пользователь типа решает, где размещать экземпляры.
Типы ссылок всегда выделяются в куче. Типы значений по умолчанию размещаются в стеке. Исключение составляют случаи, когда тип значения является частью ссылочного типа, и в этом случае он размещается в куче вместе с ссылочным типом. То есть дизайнер типа принимает это решение от имени пользователей.
В таких языках, как C или C ++, пользователь может решить, где размещать данные, и для некоторых особых случаев это может быть значительно быстрее для выделения из стека по сравнению с выделением из кучи.
Это связано с обработкой выделения кучи для C / C ++. На самом деле в .NET распределение кучи происходит довольно быстро (за исключением случаев, когда он запускает сборщик мусора), поэтому даже если вы решите, куда распределить, я думаю, что разница не будет существенной.
Однако, поскольку куча является сборщиком мусора, а стек - нет, очевидно, в некоторых случаях вы увидите некоторые различия, но это вряд ли уместно, учитывая тот факт, что у вас нет выбора в .NET.