Почем методы? (Сравнение скорости работы методов в .NET)

Сегодня мы рассмотрим скорость работы методов.

К сравнению представлены следующие типы «методов»:

  1. вызов метода своего класса (this),
  2. вызов метода другого класса,
  3. вызов виртуального метода (virtual),
  4. вызов переопределенного виртуального метода (override),
  5. вызов события (event),
  6. вызов делегата на базе лямбда выражений (Lambda expressions).

Читать далее «Почем методы? (Сравнение скорости работы методов в .NET)»

.NET Свойства против полей. Что быстрее?

Третьего дня писал очень ресурсоёмкий алгоритм. Он был узким местом во время работы приложения, и, соответственно, его скорость работы серьезным образом отражалась на производительности всего приложения. Запустив профайлер заметил, что основная нагрузка приходилась на получение значений из свойств. Не долго думая, я заменил автоматические свойства полями. Профайлер показал значительный прирост производительности. На этом я и успокоился.

Однако этот факт не давал мне покоя — как же так, я везде и всегда старался следовать правилам написания кода, а тут оказывается что этим самым рубил его производительность? Я решил написать небольшой тест для оценки скорости работы свойств и полей. Вот что у меня получилось.
Читать далее «.NET Свойства против полей. Что быстрее?»

Настраиваем настройки

Место нахождения

В Microsoft Visual Studio есть очень полезная вещь — встроенная поддержка настроек «из коробки». Если нужна настройка в программе — открываем редактор, вводим название, тип и значение по умолчанию. Все. Можно пользоваться. Настройки загружаются, сохраняются, сбрасываются.

В коде можно написать (CoolSetting — название, тип System.Int32):

Settings.Default.CoolSetting = 5;

Типом настройки может быть любой сериализуемый тип. Но вот возникает необходимость добавить список чего-либо, и мы натыкаемся на нежелание редактора работать с generic (List<T> и т.д.).

Исправлять эту несправедливость придется руками. Благо сделать это нужно всего один раз для опции с generic-типом. Нужно добавить настройку указав ей любой доступный тип (например System.String). Затем открыть файл Settings.settings в текстовом редакторе и заменить на нужный нам тип (полностью), треугольные скобочки <> заменяем на &lt; и &gt; соответственно.

Здесь показано где именно нужно менять тип

Теперь можно возвращаться во встроенный редактор настроек, и работать.

Хочется обратить внимание на одну неприятную особенность работы со встроенными настройками. Первое обращение к любой настройке вызовет достаточно серьезный лаг, доходящий до 1000 миллисекунд!!! Следующие обращения будут работать приемлемо быстро. Как правило это время затрачивается при загрузке программы, тем самым удлиняя ее.