Size: a a a

2020 December 02

ЕБ

Евгений Бурмистров... in pro.net
подскажите, как бы мне так хитро навесить аттрибутов на эндпоинт, чтобы openApi генератор сам генерил в 400/schema
oneOf
- BadRequest (мой тип)
- BadRequest (ProblemDetails, который асп нет кор валидатор швыряет)
источник

ЕБ

Евгений Бурмистров... in pro.net
или все нормальные люди используют schema-first ? :(
источник

AB

Alex Bespalov in pro.net
Не оч. понятно, но таки всегда можно обмазаться доп. логикой энрич генерируемой спеки openapi напрямую в фильтре(там интерфейс реализуешь и при генерации спеки он дергается. можно отредактировать/добавить чего то)
источник

ЕБ

Евгений Бурмистров... in pro.net
сейчас посмотрю, а в сторону какого фильтра копать, IOperationFilter?
источник

AB

Alex Bespalov in pro.net
Что то такое, да. Как раз через подобный фильтр добавляли в спеку общие ответы/что то такое на все методы апи.
источник

G

George in pro.net
Ayrat Hudaygulov
у меня тут как раз стоит вопрос быстрого сравнения строк. Предположим есть 5 известных строк (хедеры), которые надо вайтлистить

У нас есть функция вида: string -> bool которая должна ответить входит ли входящая строка в вайтлист.
Есть 3 реализации:
на хешсете, в который подается StringOrdinal компаратор
на свич кейсе, который свичит по длине входящей строки в начале, и если подходит, делает стринг.компаре ординалс
и то же самое на свич експрешне (должно быть то же самое)

В итоге
хешсет - 40нс
свич кейс 4.2нс
свич експрешн - 4.6нс

код и бенчи показать не могу, чот ремоут тачка отвалилась -_-

Вопрос - какой самый быстрый способ узнать входит ли строка в некий ограниченный пул строк?
Если у тебя несколько больше строк, то тебе лучше всего trie зайдет. Это структура, которая для строк быстрее словаря работает. Как любое префиксное дерево, ее алгоритмическое время O(len)
источник

G

George in pro.net
Оно найдет вхождение за такое же алгоритмическое время, как сравнение одной строки.
Что касается конкретной скорости - нужно понимать, что там ни разу не вычисляется хэшкод, спуск по дереву делается по чарактеру, на ааждый чарактер происходит разименование считывание из массива указателей и считывание по этому указателю.
источник

G

George in pro.net
Сори, ошибся - там не log(len), а просто len. Поправил в ответе
источник

G

George in pro.net
Собственно trie используется в быстрых роутерах веб-реквестов по url.
источник

IB

Ivan Balanar in pro.net
вообще не очень понятно, почему его нет в стандартных коллекциях - у меня это наиболее часто используемый контейнер, когда остальных не хватает (примерно раз в пять лет)
источник

FM

Fame Mane in pro.net
Fame Mane
может кто встречал альтернативу https://github.com/refraction-networking/utls данного пакета для шарпа? Нужно немного модицировать части из клиентхэлло этапа в тлсе, но что-то стандартными средствами как-то нереально это сделать видимо или я чего-то непонял(
видимо никак, в сорцах всё завязано на интеропе и толку в них смотреть нету, видимо аналогов нету и не будет( придётся на го пописать((999
источник
2020 December 03

AD

Alex Dev in pro.net
🤨
источник

Dv

Dr. Friedrich von Ne... in pro.net
Ilya Chernoudov
default interface например требуют поддержку рантайма
Covariant returns тоже.
источник

Dv

Dr. Friedrich von Ne... in pro.net
Ayrat Hudaygulov
у меня тут как раз стоит вопрос быстрого сравнения строк. Предположим есть 5 известных строк (хедеры), которые надо вайтлистить

У нас есть функция вида: string -> bool которая должна ответить входит ли входящая строка в вайтлист.
Есть 3 реализации:
на хешсете, в который подается StringOrdinal компаратор
на свич кейсе, который свичит по длине входящей строки в начале, и если подходит, делает стринг.компаре ординалс
и то же самое на свич експрешне (должно быть то же самое)

В итоге
хешсет - 40нс
свич кейс 4.2нс
свич експрешн - 4.6нс

код и бенчи показать не могу, чот ремоут тачка отвалилась -_-

Вопрос - какой самый быстрый способ узнать входит ли строка в некий ограниченный пул строк?
Для хедеров можешь ещё добавить быструю проверку со сравнением первых нескольких символов, наподобие того, что сделано в MSBuild. Мб ещё быстрее станет. Но нужны тесты на реальной нагрузке.
источник

Dv

Dr. Friedrich von Ne... in pro.net
Alexey Tkachenko
К слову о сравнении строк... Если они равны по сути, но получены с помощью разных суррогатов, в результате чего длина получилась разная, строки будут равны или нет?
Ты прав, но на деле зависит от того, в какой нормальной форме сравнивать. Айрат не случайно у себя написал про Ordinal, ну и в хедерах там пофиг. Я всё равно не уверен, что Юникод в именах хедеров стандартизирован, ну и точно в этом случае он не нужен.
источник

IC

Ilya Chernoudov in pro.net
Dr. Friedrich von Never
Covariant returns тоже.
Судя по количеству багов с ним, он даже в 5 не работает
источник

AT

Alexey Tkachenko in pro.net
Ilya Chernoudov
Судя по количеству багов с ним, он даже в 5 не работает
А можно пруф на баги?
источник

IC

Ilya Chernoudov in pro.net
источник

IC

Ilya Chernoudov in pro.net
Alexey Tkachenko
А можно пруф на баги?
^
источник

IC

Ilya Chernoudov in pro.net
GetTypes крашит рантайм
источник