MSDN "Написание более быстрого управляемого кода: знайте, что стоит" довольно хорошо, но он был написан для CLR v1 в 2003 году. там обновленная версия этого где-нибудь?
Есть ли обновленная версия "Написание более быстрого управляемого кода: знайте, что стоит"?
Ответ 1
Нет. Я никогда не обновлял его, но я думаю, что с соответствующими солями соли, общий совет и большинство эмпирических правил в статье все еще сохраняются хорошо.
(Тем не менее, было бы интересно повторить эксперимент сегодня, чтобы увидеть, как изменились примитивные времена, как сгенерированный код изменился и как изменились микропроцессоры.)
Относительные накладные расходы большинства примитивов не сильно изменились, но некоторые из них сильно изменились. Например, средняя производительность нестатического делегирования делегатов была значительно улучшена (в .NET 2.0, если я правильно помню). Мне не хотелось бы думать, что сегодня практикующий будет избегать обращения к делегату, потому что я сообщил об этом в 2003 году как очень дорогостоящий.
Начиная с .NET 1.1, я ожидал бы, что многие скомпилированные кодовые последовательности будут изменены; были бы новые оптимизаторы компилятора JIT (что не так хорошо проявляется в микрообъектах); разные сочетания кода JIT'd и NGEN'd (и NGEN не была изучена в моей статье); и ключевые подсистемы, такие как сборщик мусора, постоянно настраивались на протяжении многих лет.
Я повторяю свои предостерегающие советы о потенциале эффектов системы памяти, чтобы заглушить затраты на любое количество операций управляемого примитивного управляемого кода - и снова обратите внимание, что многое изменилось. Например, большая часть работы CLR в 03-04 вошла в улучшенное поведение рабочего набора (например, минимизацию грязных частных страниц) системных сборок NGEN'd.
Конечно, тема статьи - настоятельная необходимость вдумчиво и бдительно измерять производительность вашего кода, и эта тема вневременна.
Кстати, я всегда хотел сделать следующую статью о ожидаемых/типичных затратах времени и пространства в топ-сотнях или около того наиболее используемых методов .NET BCL, а также продемонстрировать в качестве предостерегающих рассказов несколько ужасов рассказы, которые мы нашли, работая над производительностью .NET. Это привело к очень интересному размышлению о том, как охарактеризовать эмпирическую работу библиотеки классов/структуры, как фактически используемую реальными практикующими в дикой природе...
Спасибо, что прочли его, и благодарю вас за ваш постоянный интерес.
p.s. Я вижу, что Вэнс Моррисон впоследствии написал замечательную двухчастную серию MSDN на эту тему - если бы вам понравилась моя статья, вы полюбите ее:
Ответ 2
Я так не думаю, и я не думаю, что обновленная версия будет совсем другой.
Временные диаграммы будут отличаться, поскольку тестовая машина, вероятно, будет более новой и быстрой, но соотношение между тестами будет почти таким же.
В статье рассказывается о низкоуровневых эффектах общих операций в управляемом коде, и это не сильно изменилось с тех пор, как была написана статья. Новые версии фреймворка добавили много функциональности, но все они построены на примитивах, которые были доступны с С# 1.0.
Ответ 3
Я не знаю того, что заменяет это, но книга CLR через С# предоставит вам много глубоких и актуальных знаний как работает среда CLR и где она потребляет много времени и ресурсов.