Здравствуйте, Sinclair, Вы писали:
S>Зачем любого? Есть типы, которые хорошо работают с value-семантикой — например, TimeSpan, DateTime, Decimal. S>Вот их можно запросто разместить на стеке. S>А вот как, и, главное, зачем размещать на стеке объекты типа WebRequest я, простите, не понимаю.
Ну вообще то работа со стеком заметно быстрее. Так что как раз нужны причины для не размещения на стеке.
S>Не бесконечной, а достаточно большой. S>Понятно, что GС даёт оверхед. Но даже в случае предельно ограниченной памяти, хороший GC даёт всего 70% потерь по сравнению с ручным менеджментом. S>При двукратном превышении — отставание всего 17%. Начиная с 2.5-кратного превышения, перформанс GC и ручного управления становятся неразличимы. S>На минуточку напомню, что мы говорим не о производительности приложения, а о затратах только на memory management. Т.е. если приложение хотя бы половину времени тратит на полезную работу, то разница между подходами к управлению памятью сокращается ещё вдвое.
Сомнительные цифры, т.к. не указана реализация ручного управления — может там всё в том же самом стеке лежит?) Это больше похоже на изменение производительности GC относительно своего же идеального варианта. Вот в такое мне вполне верится...
S>И это — в обмен на гарантии type safety! S>Для очень широкого класса задач это более чем приемлемая цена.
Насчёт последней фразы я конечно же согласен. ) К примеру я сам с удовольствием использую Python (а там вообще всё мрачно в этом смысле) и нисколько не напрягаюсь из-за его GC. )