Re[40]: Есть ли подобие LINQ на других языках/платформах?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.04.21 12:01
Оценка: :)
Здравствуйте, Serginio1, Вы писали:

I>>Я не сильно понимаю эти результаты. Что такое удавы и какой код получил 3 удава? Самый быстрый это 3 или 5 ?

S>Ну посмотри статью. Там все написано и расписано.

Я же сказал — мне непонятно. Выглядит, как будто магия
То есть, x[0] оказывается медленее чем x.First() который унутре все равно вызовет x[0]

Подозреваю, некорректный тесты.

I>>Я вижу, что здесь непойми что и не ясно, зачем вообще выделять память. Зачем делать add() если можно просто вызвать соответствующую функцию?

I>>Память нужно выделять в том случае, если у нас есть многочисленные повторные проходы по источнику.

S> В том, что нужно получать итератор. А здесь как раз идет сравнение с итератора и через прямое вычисление без итераторов.

S>Так или иначе идет вызов MoveNext на стороне итератора идут 10 вызовов кстати через индекс так как передан массив.

Непонятно — x[0] стал медленее того же x[0] завернутого в функцию с телом yield x[0].

Тебе не кажется это странным?

S>Но нужны коллекции для заиси в базу, отображения итд


I>>То ты сэкономишь кучу памяти, но при этом работа с источником окажется примерно в 1000 раз медленнее.

I>>И для оптимизации используется кеширование коллекции.

S>В реалии Отборов может быть великое множество. Памяти не хватит кэшировать.


В реальности оптимизации подбираем под соответствующие узкие места, а не абы как.


S>Мало того данные имеют свойство меняться


S>3 попугая для

S>[cs]
S>public int Iterative()
S> {
S> var counter = 0;
S> foreach (var item in items)
S> {
S> if (item % 10 == 0)
S> counter += item;
S> }

Если попугаи это секунды, то следовательно самый быстрый код это простой проход по массиву, как я тебе и говорил.
А раз самый медленный это 5.08, то это почти в два раза хуже.
Ты точно думаешь, что две секунды это почти так же хорошо, как и одна?

S>Но когда нам нужны коллекции заполнение List оказывается значительно дороже.


А кто тебя просит их создавать?
Где здесь коллекция:
let state = initial();
let i = 0;

while(true) {
    i++;
    state = state.next(i);
    if(isGoodEnough(state, i)) {
           return {state, i};
        }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.