TGStat
TGStat
Qidiruv uchun matnni kiriting
Ilg‘or kanal qidiruvi
  • flag Uzbek
    Sayt tili
    flag Russian flag English flag Uzbek
  • Saytga kirish
  • Katalog
    Kanal va guruhlar katalogi Hududiy to‘plamlar Tematik to‘plamlar Платные каналы Kanallar qidiruvi
    Kanal/guruh qo‘shish
  • Reytinglar
    Kanallar reytingi Guruhlar reytingi Postlar reytingi
    Brendlar va shaxslar reytingi
  • Analitika
  • Postlarda qidiruv
  • Telegram'ni kuzatish
  • Targ‘ibot
    Yandex Business orqali reklama TGStat Agency orqali kanallarda reklama TGStat.ru saytida reklama
C# Heppard

25 Nov 2025, 09:31

Telegram'da ochish Ulashish Shikoyat qilish

FastEnum #скорость

Иногда нам нужно не просто быстро, а очень быстро. В этот момент в дело вступают самые необычные оптимизации. Например, оптимизация работы с enum. Типичный сценарий - получить строку из enum'a или, наоборот, enum из строки.

Многие знают, что получение строкового представления enum'a лучше делать через Enum.GetName(MyEnum.Value), а вариант MyEnum.Value.ToString() аллоцирует новую строку и несколько медленнее.

В случае сложной логики получения строкового представления enum'a, чаще всего используется кэш (который, кстати, есть в Enum.GetName). Для этой цели можно написать свой класс, который содержит два словаря. В случае получения строки из enum'a мы идём по одному словарю, а в случае получения enum'a из строки - по другому. Код примерно такой:
private static readonly FrozenDictionary StringToValues;
private static readonly FrozenDictionary ValuesToString;

static EnumUtils() {
var enums = Enum.GetValues();
StringToValues = enums.ToFrozenDictionary(...);
ValuesToString = enums.ToFrozenDictionary();
}

public static string ToString(T value) {
return ValuesToString.TryGetValue(value, out var stringValue)
? stringValue
: Throw($"Value '{value}' is not defined");
}
Конечно, никакого ноу-хау тут нет, и для таких оптимизаций уже существует несколько готовых библиотек. Одна из них - FastEnum. Она показывает значительный прирост скорости не только по сравнению с обычными способами работы с enum в .NET (почти в два раза), но и по сравнению с другими подобными библиотеками: от Эндрю Лока и Enums.NET. FastEnum и библиотека от Эндрю Лока используют source generators.

Мне не очень нравится тащить в код лишние зависимости, поэтому, чаще всего, я использую самописный кэш для ускорения работы с enum. Тем более, в нём можно сделать дополнительную логику, специфичную для конкретного проекта. И, в любом случае, я рекомендую присмотреться к этим библиотекам. Они маленькие и понятные, а подходы, которые там используются, могут пригодиться в повседневной работе.

Картинка бенчмарка 'https://t.me/csharp_gepard/165?comment=2090' rel='nofollow'>тут.
Сам бенчмарк тут.

1.2k 0 25 34 31
Katalog
Kanal va guruhlar katalogi Kanallar to‘plamlari Kanallar qidiruvi Kanal/guruh qo‘shish
Reytinglar
Telegram-kanallar reytingi Telegram-guruhlar reytingi Postlar reytingi Brendlar va shaxslar reytingi
API
Statistika API'si Postlar qidiruvi API'si API Callback
Kanallarimiz
@TGStat @TGStat_Chat @telepulse @TGStatAPI
O‘qish
Академия TGStat Telegram tadqiqoti 2019 Telegram tadqiqoti 2021 Telegram tadqiqoti 2023
Kontaktlar
Справочный центр Qo‘llab-quvvatlash Email Vakansiyalar
Har xil narsalar
Foydalanuvchi shartnomasi Maxfiylik siyosati Ommaviy oferta
Botlarimiz
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot