Pull to refresh
  • by relevance
  • by date
  • by rating

Замеряем производительность с помощью BenchmarkDotNet

.NET *C# *
imageДобрый день. Неделю назад я в третий раз применил библиотеку для создания\запуска .NET бенчмарков BenchmarkDotNet. Библиотека оказалась достаточно удобной, но практически не освещенной на хабре, что я сейчас и исправлю.

Под бенчмарком я подразумеваю измерение времени выполнения метода(ов). Для начала представим процесс написания бенчмарка руками. Создаем тестируемый метод, выбираем Release билд, создаем «замеряющий» метод, в нем собираем мусор, ставим StopWatch в начале и в конце, запускаем прогрев, запускаем тестируемый метод. Если тестируемый метод выполняется быстрее одного «тика» StopWatch, запускаем тестируемый метод много раз (пусть будет миллион), делим суммарное время на миллион, получаем результат (при этом нужно не забыть вычесть из суммарного времени время «холостого» прогона цикла на миллион операций).

А ведь это еще не все!
Total votes 20: ↑17 and ↓3 +14
Views 20K
Comments 19

«Хаос в .NET-мире — разумная цена за скорость развития платформы»: интервью с Андреем Акиньшиным (JetBrains)

JUG Ru Group corporate blog .NET *C# *


Проект Rider (.NET IDE от JetBrains) дошёл до публичной EAP-версии — самое время подробно расспросить Андрея Акиньшина, одного из его разработчиков. Но Rider стал не единственной темой нового выпуска «Без слайдов». Помимо него, поговорили:

  • о библиотеке BenchmarkDotNet, которую разрабатывает Андрей
  • о движении Microsoft к опенсорсу и кроссплатформенности
  • об общем состоянии .NET-мира и, конечно,
  • о .NET-конференции DotNext (которая, кстати, состоится в Москве уже в эту пятницу)

Как всегда, под катом есть полная расшифровка интервью.


Читать дальше →
Total votes 57: ↑53 and ↓4 +49
Views 21K
Comments 62

История оптимизации одного IoC контейнера

Programming *.NET *C# *

В этой заметке мне хотелось бы поделиться информацией о небольшом, но, на мой взгляд, весьма и весьма полезном проекте, в котором Stefán Jökull Sigurðarson добавляет все известные ему IoC контейнеры, которые мигрировали на .NET Core, и с использованием BenchmarkDotNet проводит замеры instance resolving performance. Не упустил возможности поучаствовать в этом соревновании и я со своим маленьким проектом FsContainer.


image

Читать дальше →
Total votes 20: ↑19 and ↓1 +18
Views 7.3K
Comments 8

Пишем свой маппер для .NET Standard 2.0

Programming *.NET *C# *

В сегодняшней заметке я хотел бы поведать вам о коротком приключении по написанию своего маппера для .NET Standard 2.0. Ссылка на github и результаты benchmark'ов прилагаются.

Читать дальше →
Total votes 28: ↑23 and ↓5 +18
Views 11K
Comments 19

.NET Core vs Framework. Производительность коллекций

.NET *C# *

image


Релиз .NET Core 3.1 — хороший повод мигрировать свой проект с Framework на Core. Во-первых, это отполированная версия с долгосрочной поддержкой (LTS), т.е. её можно смело использовать в продакшене. Во-вторых, в третьей версии добавили поддержку WPF и WinForms, так что теперь появилась возможность мигрировать и десктопные приложения.


Мне стало интересно, какой прирост производительности можно ожидать от Core в самых базовых классах, которые максимально часто используются в коде. Например, коллекции List, Array и Dictionary.


Если вам тоже интересно, как и почему изменилась производительность основных коллекций в Core 3 — прошу под кат!

Читать дальше →
Total votes 41: ↑41 and ↓0 +41
Views 20K
Comments 40

Сравниваем c# операторы ?: vs if-else vs switch

.NET *C# *
Сегодня на ревью прилетела очередная фабрика животных:

public static class AnimalsFactory
{
    public static Animal CreateAnimalByTernaryOperator(bool isCat)
    {
        return isCat ? (Animal)new Cat() : new Dog();
    }
}

В который раз расстроился, что C# заставляет делать каст объекта Cat к Animal. Но пусть лучше будет каст, ведь через if-else оператор код получается ещё длиннее:
public static class AnimalsFactory
{
    public static Animal CreateAnimalByIfElseOperator(bool isCat)
    {
        if (isCat)
            return new Cat();

        return new Dog();
    }
}

Отвлечёмся на минуту от ревью и попробуем разобраться:

  • будет ли отличаться IL-код в этих примерах?
  • будет ли один из примеров в выигрыше по производительности?

Читать дальше →
Total votes 6: ↑5 and ↓1 +4
Views 5.5K
Comments 14