Ответ «Нет» написан с точки зрения хорошего кодировщика, ориентированного на производительность, который уже знает все хитрости и ловушки, например ::10000
- Нет LINQ в тесных петлях. В самом деле. Никто. Когда-либо.
- Приведите ваши перечисления к целым числам перед сравнением
- Остерегайтесь структур типа значения
- «новый» - это новый Грю
- CLRProfiler - твой друг
- Другие профилировщики помещают переменное время строительства в странные места
Ответ «Да» очень важен для кодировщика, который не знает о подводных камнях в дизайне C #, или для того, кто проглотил кулер «Профилирование - зло».
Я инициализирую множество (возможно, даже МНОГО) матриц и массивов в нашем коде. Я заметил, что ленивая инициализация с:
if (переменная == ноль)
// variable = new Variable ()
кажется менее производительным, чем предварительное построение. Поскольку readonly вынуждает вас создавать в конструкторе, вы получаете преимущества локализации данных в памяти и не позволяете вам выполнять другие катастрофические операции «сборки и замены во время выполнения». C # может ужасно подавиться сборщиком мусора.
C # позволяет нам очень легко писать ужасно неэффективный код памяти. malloc был способом заставить нас задуматься о (де) распределении. Точно так же, только чтение заставляет нас думать об этом.
Запустите CLRProfiler, убедитесь, сколько спама в памяти вы делаете. Если вы писали HPC без почти сверхчеловеческой дисциплины, есть вероятность, что вы рассылаете кучу спама и только для чтения могут помешать вам сделать это.
Тем не менее, если вы не пишете код HPC, то преждевременная оптимизация является корнем всех знаний об архитектуре машины. О нет, подожди ... Я имел в виду зло, согласно стандартной доктрине. Все приветствуют стандартную доктрину.