x
Ага
x
Спасибо, буду дальше рыть
Dr. Friedrich
Dr. Friedrich
У нас в ришорпере для этого есть специальный smartlist или как-то так
Dr. Friedrich
У него особенность такая, что он — структура
Dr. Friedrich
И первые N элементов списка пакуются в эту структуру.
Dr. Friedrich
А остальные уже складываются в настоящий лист, если не влезают в структуру.
Dr. Friedrich
И это пофиксило овердофига memory traffic проблем.
Dr. Friedrich
Ну, разумеется, для тех случаев, когда у нас использовались листы длиной менее N элементов.
Dr. Friedrich
Ayrat
Dr. Friedrich
Да, понял. По духу ты правильно сказал :)
Dr. Friedrich
Спан считается безопасным потому, что у него баундс чеки.
Vasily
Интересно, как
Dr. Friedrich
Dr. Friedrich
Сходу нагуглился только вот этот страх: https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.runtimehelpers.ensuresufficientexecutionstack
Dr. Friedrich
> Ensures that the remaining stack space is large enough to execute the average .NET Framework function.
average 😂
Hog
Ayrat
Dr. Friedrich
Вообще, в том классе много интересных вещей
Dr. Friedrich
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.runtimehelpers.getobjectvalue?view=netcore-2.1
Dr. Friedrich
Нафига, интересно.
Ayrat
в корефх его нет, а в сборке компайлерСервис только заголовочные файлы торчат
Ayrat
о, нашёл
http://source.roslyn.io/#Microsoft.CodeAnalysis/InternalUtilities/StackGuard.cs,9be1606f7f7bdc17,references
Ayrat
а, не нашёл)))
Dr. Friedrich
Dr. Friedrich
Ну, которому бы можно было передать количество памяти, например.
Dr. Friedrich
> > plenty close enough for the purposes of this method
Ayrat
Ayrat
прям угарают в каждом методе
Bonart
Dr. Friedrich
Вероятно, можно заюзать, если интеропишься с ReSharper SDK.
Dr. Friedrich
Но в бизнес-коде это несложно самому реализовать
Dr. Friedrich
Тут ещё желательно по своему коду иметь статистику — насколько много у вас коротких списков из N элементов
Dr. Friedrich
И под это подгонять структуру
Ayrat
Ayrat
100?
Dr. Friedrich
Щас скажу. Эта инфа в общем-то публичная, на митапах рассказывалось
Dr. Friedrich
100?
Щас будешь смеяться.
Dr. Friedrich
1 :)
Ayrat
воу воу воу
Ayrat
неожиданно капец
Bonart
Ayrat
struct SmartList<T>
{
T value;
List<T> OnHeap;
.ctor(T[] arr)
{
if arr.Length = 1 then value = arr.[0]
else OnHeap = arr.ToList()
}
}
Ayrat
сделано! :D
Bonart
сделано! :D
Нет-нет-нет, Дэвид Блейн. Индексатор хде?
Bonart
Итератор хде?
Bonart
Но тема хорошая, в плюсах так короткие строки оптимизируют
Bonart
Bonart
Ну и конечно надо целую пачку методов ToSmartList() - без них оптимизация накроется
Ayrat
Ayrat
хотя я тут подумал. вот будь у меня например даже 5% списков единичной длины, то внедрив такую оптимизацию можно заметно (в пределах решарпера) сократить меморитраффик
Ayrat
т.е. это очень оправдано когда ты борешься аки лев за перформанс
Bonart
Решарпер само собой борется
Bonart
У нас хороший эффект давал переход к IIndexable - переставали плодиться лишние массивы в куче. Это было еще до ImmutableList
Dr. Friedrich
Romɑn
Когда хочешь в пайпы но не можешь
Romɑn
😱😱😱
Romɑn
x
открыл в райдере хеловорлд с эксерсизма, а оно так:
x
x
проект вроде простенький совсем
x
x
(дело происходит в линуксе)
x
или это широко известная фича?
x
Да
Ayrat
Это фича?) Похожа на багу
x
Да
Ayrat
А, ну ладно.
x
Просто я вежливый очень