home.social

#gethashcode — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #gethashcode, aggregated by home.social.

  1. Бенчмаркая FrozenDictionary: заменил Dictionary — получил от ×0,76 до ×1,9

    FrozenDictionary сделан под словари, которые заполняют один раз при старте, а дальше только читают. Замерил на четырёх машинах и трёх рантаймах — разброс вышел от ×0,76 до ×1,9, и зависит он не от версии .NET, а от того, сколько ключей и как они устроены. Разобрал, куда уходит время в поиске по строке, вытащил из рантайма имена реализаций, которые он подбирает под конкретный набор ключей, и посмотрел в дизасме, за счёт чего Frozen выигрывает — и почему на маленьких наборах проигрывает.

    habr.com/ru/articles/1063034/

    #frozendictionary #dictionary #immutabledictionary #readonlydictionary #benchmarkdotnet #gethashcode #коллекции #производительность #net_10 #switch

  2. Бенчмаркая ключи Dictionary: забыл IEquatable — получил ×5 и 96 байт на каждый поиск

    Структура в роли ключа Dictionary — частый случай. Забыл IEquatable — и каждый TryGetValue в 4,4–5,7 раза медленнее, плюс 96 байт в куче на каждый поиск. Проверил на четырёх машинах и трёх рантаймах, снял дизасм FindValue и разобрал, откуда берутся ровно три упаковки, почему override Equals не спасает и при чём тут хэш record struct. Сам рантайм этот разрыв не закроет — и это не баг.

    habr.com/ru/articles/1062854/

    #dictionary #iequatable #boxing #боксинг #record_struct #benchmarkdotnet #gethashcode #производительность #net_10 #structs

  3. Бенчмаркая ключи Dictionary: забыл IEquatable — получил ×5 и 96 байт на каждый поиск

    Структура в роли ключа Dictionary — частый случай. Забыл IEquatable — и каждый TryGetValue в 4,4–5,7 раза медленнее, плюс 96 байт в куче на каждый поиск. Проверил на четырёх машинах и трёх рантаймах, снял дизасм FindValue и разобрал, откуда берутся ровно три упаковки, почему override Equals не спасает и при чём тут хэш record struct. Сам рантайм этот разрыв не закроет — и это не баг.

    habr.com/ru/articles/1062854/

    #dictionary #iequatable #boxing #боксинг #record_struct #benchmarkdotnet #gethashcode #производительность #net_10 #structs

  4. Бенчмаркая ключи Dictionary: забыл IEquatable — получил ×5 и 96 байт на каждый поиск

    Структура в роли ключа Dictionary — частый случай. Забыл IEquatable — и каждый TryGetValue в 4,4–5,7 раза медленнее, плюс 96 байт в куче на каждый поиск. Проверил на четырёх машинах и трёх рантаймах, снял дизасм FindValue и разобрал, откуда берутся ровно три упаковки, почему override Equals не спасает и при чём тут хэш record struct. Сам рантайм этот разрыв не закроет — и это не баг.

    habr.com/ru/articles/1062854/

    #dictionary #iequatable #boxing #боксинг #record_struct #benchmarkdotnet #gethashcode #производительность #net_10 #structs

  5. Почему == и .Equals() — не одно и то же (и как это вас подставит)

    Привет, Хабр! Когда речь заходит о сравнении объектов, все почему-то решают, что это элементарный вопрос: ну есть же == и есть .Equals() , в чём проблема? На практике — проблема порой вырастает в целое шапито. Сегодня поговорим о весьма противоречивой парочке. Почему иногда, написав var a = b; if (a == b) { ... } , мы проверяем одно, а вызвав a.Equals(b) — совершенно другое? И главное: как это может довольно жестоко подставить нас в реальном коде, когда «ой, ну мы же не ожидали, что кто‑то переопределит оператор == так хитро».

    habr.com/ru/companies/otus/art

    #c# #сравнение_объектов #Проблемы_с_производительностью #перегрузка_оператора #Строки_в_C# #переопределение_equals #gethashcode #сравнение_значений