Здравствуйте, chaotic-good, Вы писали:
G>>Любой код можно написать плохо. Можно считать это аксиомой. Но даже тысячи плохо написанных пулов объектов не делают пулинг с gc неэффективным.
G>>Если посмотреть внтуренности .NET и Roslyn, то можно заметить, что очень часто используется thread-local пул объектов StringBuilder, который очень даже изменяемый. На Channel9 даже есть запись с teched где объясняют почему так.
CG>И почему же так? Я запись нашел, но смотреть времени нет.
Time spent in the garbage collector harms responsiveness
Average delays ≈ (Collection rate) × (Collection cost)
Average delays ≈ (Allocation rate) × (Heap size)
Less often (reduce collection rate)
Smaller, fewer long-lived objects (reduce heap size)
G>>Bpexfnm jnc.lf — http://codeblog.jonskeet.uk/2014/08/01/object-pooling-and-thread-safety/ и далее по ссылкам.
CG>Плохая статья, метод измерения производительности неизвестен. Он как-то бенчмаркает и потом делает выводы, но как — неизвестно. Может у него тест слишком короткий и в gen 2 этот string builder не успевает попасть.
Ты наверное не в курсе, что jonskeet это крутейший чувак по C#. Автор множеств книг и №1 на SO
http://stackoverflow.com/users?tab=Reputation&filter=all
Я его мнению доверяю больше, чем всем "экспертам" на этом форуме. И тебе советую.