Используйте качественный профилировщик и определите, где ваши узкие места.
Затем начните спрашивать, как улучшить производительность.
Любой, кто делает какие-либо общие заявления, такие как «избегать отражения», не понимая как свой профиль производительности, так и ваш проблемный домен, должен быть снят (или, по крайней мере, перевоспитан). И учитывая размер ландшафта .Net, почти бессмысленно говорить о оптимизации C#: говорим ли мы о WinForms, ASP.Net, BizTalk, Workflow, SQL-CLR? Без контекста даже общие рекомендации могут быть в лучшем случае пустой тратой времени.
Рассмотрите также то, что вы подразумеваете под «ускорить его» и «улучшить производительность». Вы имеете в виду большую ресурсоэффективность или более низкое воспринимаемое время ожидания для конечного пользователя (при условии, что оно есть)? Это очень разные проблемы для решения.
Учитывая форум, я чувствую себя обязанным отметить, что в Code Complete есть довольно неплохое освещение этих тем. Не особый ум C#. Но это хорошо. Имейте в виду, что языковые специфические микрооптимизации могут быть включены в следующую версию того компилятора, который вы используете. И если для вас важна разница между for и foreach, вы, вероятно, пишете C++ в любом случае, верно?
[Мне понравилось RedGate в ANTS Profiler, но я думаю, что это может быть улучшено]
При том, что путь, некоторые мысли:
- Используйте тип (SomeType) в предпочтении к instance.GetType(), если это возможно
- Использование Еогеасп в предпочтение для
- Избегайте бокс
- До (я думаю) 3 строки это нормально, чтобы делать StringA + StringB + StringC.После этого вы должны использовать StringBuilder
Прошу прощения, но общие методы оптимизации по определению являются общими, они не могут быть C# специфическими :-). – 2008-10-08 14:42:16