Существует ли обновленная версия «Написание ускоренного управляемого кода: знать, что стоит»? - PullRequest
11 голосов
/ 05 апреля 2009

MSDN "Написание более быстрого управляемого кода: знайте, что стоит" довольно приятно, но оно было написано для CLR v1 в 2003 году. Есть ли где-нибудь обновленная версия?

Ответы [ 3 ]

19 голосов
/ 18 ноября 2010

Нет. Я никогда не обновлял его, но я думаю, что, если принять его с подходящими зернами соли, общие советы и большинство практических правил в статье все еще остаются в силе сегодня.

(Тем не менее, было бы интересно повторить эксперимент сегодня, чтобы увидеть, как изменились примитивные времена, как изменился сгенерированный код и как изменились микропроцессоры.)

Относительные накладные расходы большинства примитивов не сильно изменятся, но некоторые из них кардинально изменятся. Например, посредственная производительность нестатического вызова делегата была значительно улучшена (в .NET 2.0, если я правильно помню). Мне не хотелось бы думать, что сегодняшняя практикующая изо всех сил старается избежать вызова делегатов, потому что в 2003 году я сообщила, что это очень дорого.

Начиная с .NET 1.1, я ожидал, что многие последовательности скомпилированного кода изменились; будут новые оптимизации JIT-компилятора (которые не так хорошо проявляются в микробенчмарках); различные сочетания JIT-кода и NGEN-кода (и NGEN не рассматривался в моей статье); и ключевые подсистемы, такие как сборщик мусора, непрерывно настраивались на протяжении многих лет.

Я повторяю свои предостерегающие советы о возможном влиянии системной памяти на снижение затрат на любое количество отдельных примитивных операций управляемого кода - и еще раз отмечаю, что многое изменилось. Например, большая часть работы над производительностью CLR в 03-04 была связана с улучшением поведения рабочего набора (например, минимизация грязных личных страниц) системных сборок NGEN.

Конечно, тема статьи - это необходимость вдумчиво и бдительно измерять производительность вашего кода, и эта тема вечна.

Между прочим, я всегда хотел сделать последующую статью об ожидаемых / типичных временных и пространственных затратах первых сотен или около того наиболее используемых методов .NET BCL, и продемонстрировать в качестве предостерегающих рассказов некоторые из ужасов истории, которые мы нашли, работая над производительностью .NET. Это привело к некоторым очень интересным размышлениям о том, как охарактеризовать эмпирическую производительность библиотеки / фреймворка классов, фактически используемую настоящими практиками в дикой природе ...

Спасибо, что прочитали его тогда, и спасибо за ваш постоянный интерес.

p.s. Я вижу, что Вэнс Моррисон впоследствии написал большую серию MSDN из двух частей на эту тему - если вам понравилась моя статья, вам понравятся следующие:

http://msdn.microsoft.com/en-us/magazine/cc500596.aspx

http://msdn.microsoft.com/en-us/magazine/cc507639.aspx

2 голосов
/ 06 апреля 2009

Я так не думаю и не думаю, что обновленная версия будет сильно отличаться.

Значения синхронизации будут другими, так как тестовая машина, вероятно, будет новее и быстрее, но соотношение между тестами будет примерно таким же.

Статья посвящена низкоуровневым эффектам обычных операций в управляемом коде, и это не сильно изменилось с момента написания статьи. В новых версиях фреймворка добавлено множество функций, но все они построены на примитивах, доступных с C # 1.0.

1 голос
/ 06 апреля 2009

Я не знаю ни одного, который заменит это, но книга CLR через C # предоставит вам много глубоких и актуальных знаний о том, как работает CLR и где он потребляет много времени и ресурсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...