@Fsharp_chat

Страница 280 из 772
Vladimir
22.08.2017
11:57:33
массив же по идее так и должен работать

только он ссылки правда хранит)

но можно структуры писать, тогда вообще будет то же самое

Ладно мне сча надо поработать уже, если есть желание и время, можешь PR запулить

Google
Vladimir
22.08.2017
12:00:09
вечером вернусь

Roman
22.08.2017
12:00:16
У вас на каждый запрос создается регулярное выражение.

Внутри Jiraffe

И обработка запроса не асинхронная

Прежде чем в дебри маршалинга лезть надо убрать то что на поверхности

Vasily
22.08.2017
12:02:39
А где там регулярки, кстати?

routef?

Vladimir
22.08.2017
12:03:24
ага

Vasily
22.08.2017
12:03:27
В целом можно выкинуть, имхо

route "/locations/

Сделать роуты верхнего уровня

А в них уже ветвление по идее

Roman
22.08.2017
12:04:35
или совсем жирафу убать

Google
Roman
22.08.2017
12:04:52
HttpListener и доетаточно

Vasily
22.08.2017
12:05:04
Тоже вариант, кстати

Хотя там скорее всего надо просто компиляцию регулярок сделать

Aleksander
22.08.2017
12:06:26
и вообще на C# с unsafe переписать))

Vasily
22.08.2017
12:06:45
https://github.com/dustinmoris/Giraffe/blob/f129456b6552aaf58aa23d2e74ff9809c11f10c0/src/Giraffe/HttpHandlers.fs

В этом файле добавить словарь скомпилированных регулярок

Aleksander
22.08.2017
12:08:30
кстати да, а нужен ли вообще giraffe? может эффективнее будет вынести бизнес логику на F# в отдельную либу, а все остальное делать в шарпе?

Roman
22.08.2017
12:08:38
и вообще на C# с unsafe переписать))
На фшарпе интереснее

Vasily
22.08.2017
12:09:38
https://github.com/dustinmoris/Giraffe/blob/f129456b6552aaf58aa23d2e74ff9809c11f10c0/src/Giraffe/HttpHandlers.fs#L221

Вот тут можно поправить

Сделать мемоизацию

Рекэкспа

По входному роуту

И будет в разы быстрее

Nikolay
22.08.2017
12:10:22
Прежде чем в дебри маршалинга лезть надо убрать то что на поверхности
У него слабое место сейчас GC, поэтому имеет смысл его устранить, а потом делать микрооптимизации

Vladimir
22.08.2017
12:10:58
убрать Regex на каждом запросе думаю будет хорошее подспорье GC)

Vasily
22.08.2017
12:11:04
Это по поводу регэкспов в жирафе

Хммм... мож, прям запилить PR?

Vladimir
22.08.2017
12:11:24
тут чувак пилит https://github.com/dustinmoris/Giraffe/issues/56

но что-то все не зарелизит

Google
Vasily
22.08.2017
12:12:10
Ну я попроще правку предлагаю

Там 4 строчки

Roman
22.08.2017
12:12:26
let formatStringMap = dict [ // Char Regex Parser // ---------------------------------------------------------- 'b', ("(?i:(true|false)){1}", bool.Parse >> box) // bool 'c', ("(.{1})", char >> box) // char 's', ("(.+)", box) // string 'i', ("(-?\d+)", int32 >> box) // int 'd', ("(-?\d+)", int64 >> box) // int64 'f', ("(-?\d+\.{1}\d+)", float >> box) // float ]

Это сейчас при каждом вызове

Vasily
22.08.2017
12:13:02
О, это вообще ппц

Roman
22.08.2017
12:13:55
Убрать жирафу и перфоманс должен вырасти

Vasily
22.08.2017
12:15:51
Вообще, конечно, странное решение с роутами

При большом количестве гетов даст некислую нагрузку на гц

Вот вопрос, кстати

Если роуты прямые дописывать в жирафу

Во время выполнения

Aleksander
22.08.2017
12:16:41
ну так врядли giraffe дизайнили для таких сценариев)

Vasily
22.08.2017
12:16:44
Что будет?

Vladimir
22.08.2017
12:17:00
Что будет?
без понятия) ты уже предлагал нагенерить миллион рутов)

Vasily
22.08.2017
12:17:49
В теории все ускорится

Ну а чем миллион статик рутов отличается от того, что есть сейчас?

Vladimir
22.08.2017
12:18:39
тем как искать рут среди миллиона

Vasily
22.08.2017
12:18:50
По прямому соответствию

Google
Roman
22.08.2017
12:19:34
Не, так нехорошо, а если рутов 100 миллионов будет?

Vasily
22.08.2017
12:19:49
Тогда руты верхнего уровня

И через int.TryParse

Roman
22.08.2017
12:20:08
так да

Vasily
22.08.2017
12:20:08
Всяко быстрее будет

И гц не так будет грузиться

А то там, походу, на гетах действительно гц с ума сходит

Vladimir
22.08.2017
12:22:08
я думаю проверить скомпиленный регекс будет не медленней чем найти рут из миллиона)

ту тчнее тут будет 8 регексов в худшем случае

Aleksander
22.08.2017
12:23:34
а ты мемори трафик не смотрел?)

Vladimir
22.08.2017
12:23:46
мемори что-то не получилось

Aleksander
22.08.2017
12:23:48
по идее там как раз будет видно, кто виновник

Vladimir
22.08.2017
12:23:56
поломался dotMemory

не дал снапшот даже сделать

Aleksander
22.08.2017
12:24:11
:(

https://www.jetbrains.com/dotmemory/features/ - в фичах у них заявлено

а ты как запускал?

Vladimir
22.08.2017
12:25:23
сча еще раз попробую, просто указал dll

Vlad
22.08.2017
12:26:06
а он кор уже умеет профайлить?

Vladimir
22.08.2017
12:26:13
http://c2n.me/3N86Jaq

Google
Vladimir
22.08.2017
12:26:36
вот что вылазит когда пытаюсь снапшот взять

Vasily
22.08.2017
12:32:50
я думаю проверить скомпиленный регекс будет не медленней чем найти рут из миллиона)
Да можно вообще регеэкспы ликвидировать без миллиона рутов

Aleksander
22.08.2017
12:33:23
можно не под кором запустить, по идее разницы не будет

Vasily
22.08.2017
12:33:35
Ну там важно под кором вроде

Хотя докер же

МОжно и винду

Vladimir
22.08.2017
12:33:50
Так я не запускаю) просто сбилдил и указал dll

он сам запускает

Vlad
22.08.2017
12:34:07
Эх, за выхи интересно можно успеть свой вариант выкатить или нет

Vladimir
22.08.2017
12:34:28
до 30го конкурс)

Vasily
22.08.2017
12:34:53
Я на выхи на дачу :). Никаких конкурсов :)

Aleksander
22.08.2017
12:36:22
МОжно и винду
нет, ядро там линуксовое, виндовый докер там не взлетит:) я имел ввиду что память будет аллоцироваться что под кором что под полным фреймворком одинаково, и в целях отладки фреймворк можно переключить

Vasily
22.08.2017
12:36:35
А ну так-то да

Vladimir
22.08.2017
12:37:37
оки, попробую

Vasily
22.08.2017
12:38:32
Но на следующем этапе маршалинг потребуется скорее всего

Чтобы без лишних аллокаций

И прочего гобна

И ручная сериализация

Aleksander
22.08.2017
12:47:50
или собирать свою CLR без GC ?

http://tooslowexception.com/zero-garbage-collector-for-net-core/ Смотрите как интересно. Может, и появится у нас рано или поздно возможность отказаться от gc.cpp на 30 тысяч строк.

Vasily
22.08.2017
12:50:47
Кстати, еще интересная оптимизация по памяти - хранить json в файлах

и тупо их возвращать на гет запросы

Страница 280 из 772