Сообщение Re[37]: Есть ли подобие LINQ на других языках/платформах? от 22.04.2021 17:31
Изменено 22.04.2021 17:33 Serginio1
Re[37]: Есть ли подобие LINQ на других языках/платформах?
Здравствуйте, Ikemefula, Вы писали:
I>Именно. x[0] инлайнится враз и стоит считай бесплатно. А x.FirstOrDefault() в сравнении с этим неимоверно дорог.
I>Например, когда эта операция одна из основных в экспоненциальном алгоритме, любая издержка дает конское отставание.
Я уже приводил тебе на замеры производительности. Прочитай еще раз
https://mattwarren.org/2016/09/29/Optimising-LINQ/
есть простейший запрос и оптимизаторы
Первый твой любимый List
Второй с использованием yield
все это замеряется через
Итеративно 3 удава
Linq 4.88
Roslyn 3.87
LinqOptimiser 5.03
То есть твои доводы про производительнсть yield идут лесом.
Выделение памяти намного дороже. Он умудрился проиграть даже родному Linq.
I>Именно. x[0] инлайнится враз и стоит считай бесплатно. А x.FirstOrDefault() в сравнении с этим неимоверно дорог.
I>Например, когда эта операция одна из основных в экспоненциальном алгоритме, любая издержка дает конское отставание.
Я уже приводил тебе на замеры производительности. Прочитай еще раз
https://mattwarren.org/2016/09/29/Optimising-LINQ/
есть простейший запрос и оптимизаторы
var results = items.Where(i => i % 10 == 0)
.Select(i => i + 5);
Первый твой любимый List
IEnumerable<int> LinqOptimizer(int [] input)
{
var collector = new Nessos.LinqOptimizer.Core.ArrayCollector<int>();
for (int counter = 0; counter < input.Length; counter++)
{
var i = input[counter];
if (i % 10 == 0)
{
var result = i + 5;
collector.Add(result);
}
}
return collector;
}
Второй с использованием yield
IEnumerable<int> RoslynLinqRewriteWhereSelect_ProceduralLinq1(int[] _linqitems)
{
if (_linqitems == null)
throw new System.ArgumentNullException();
for (int _index = 0; _index < _linqitems.Length; _index++)
{
var _linqitem = _linqitems[_index];
if (_linqitem % 10 == 0)
{
var _linqitem1 = _linqitem + 5;
yield return _linqitem1;
}
}
}
все это замеряется через
items.Where(i => i % 10 == 0)
.Count();
Итеративно 3 удава
Linq 4.88
Roslyn 3.87
LinqOptimiser 5.03
То есть твои доводы про производительнсть yield идут лесом.
Выделение памяти намного дороже. Он умудрился проиграть даже родному Linq.
Re[37]: Есть ли подобие LINQ на других языках/платформах?
Здравствуйте, Ikemefula, Вы писали:
I>Именно. x[0] инлайнится враз и стоит считай бесплатно. А x.FirstOrDefault() в сравнении с этим неимоверно дорог.
I>Например, когда эта операция одна из основных в экспоненциальном алгоритме, любая издержка дает конское отставание.
Я уже приводил тебе на замеры производительности. Прочитай еще раз
https://mattwarren.org/2016/09/29/Optimising-LINQ/
есть простейший запрос и оптимизаторы
Первый твой любимый List
Второй с использованием yield
Итеративно 3 удава
Linq 4.88
Roslyn 3.87
LinqOptimiser 5.03
То есть твои доводы про производительность yield идут лесом.
Выделение памяти намного дороже. Он умудрился проиграть даже родному Linq.
I>Именно. x[0] инлайнится враз и стоит считай бесплатно. А x.FirstOrDefault() в сравнении с этим неимоверно дорог.
I>Например, когда эта операция одна из основных в экспоненциальном алгоритме, любая издержка дает конское отставание.
Я уже приводил тебе на замеры производительности. Прочитай еще раз
https://mattwarren.org/2016/09/29/Optimising-LINQ/
есть простейший запрос и оптимизаторы
var results = items.Where(i => i % 10 == 0)
.Select(i => i + 5);
Первый твой любимый List
IEnumerable<int> LinqOptimizer(int [] input)
{
var collector = new Nessos.LinqOptimizer.Core.ArrayCollector<int>();
for (int counter = 0; counter < input.Length; counter++)
{
var i = input[counter];
if (i % 10 == 0)
{
var result = i + 5;
collector.Add(result);
}
}
return collector;
}
Второй с использованием yield
IEnumerable<int> RoslynLinqRewriteWhereSelect_ProceduralLinq1(int[] _linqitems)
{
if (_linqitems == null)
throw new System.ArgumentNullException();
for (int _index = 0; _index < _linqitems.Length; _index++)
{
var _linqitem = _linqitems[_index];
if (_linqitem % 10 == 0)
{
var _linqitem1 = _linqitem + 5;
yield return _linqitem1;
}
}
}
Итеративно 3 удава
Linq 4.88
Roslyn 3.87
LinqOptimiser 5.03
То есть твои доводы про производительность yield идут лесом.
Выделение памяти намного дороже. Он умудрился проиграть даже родному Linq.