|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320, потому что передаются по значению при каждом ob.enumeraror будет новая структура вываливать из объекта по этому цикл не кончится, текущим будет дефолтное значение. public IEnumerator<int> enumerator; - тут Вы ее упаковали. все в порядке. Могли бы и поставить List<int>.Enumerator тоже бы скорее всего произошла бы упаковка так как типы разные. Структуры странные типы и надо с ними очень осторожно.. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 18:32 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, потому что передаются по значению при каждом ob.enumeraror будет новая структура вываливать из объекта по этому цикл не кончится, текущим будет дефолтное значение. public IEnumerator<int> enumerator; - тут Вы ее упаковали. все в порядке. Могли бы и поставить List<int>.Enumerator тоже бы скорее всего произошла бы упаковка так как типы разные. Структуры странные типы и надо с ними очень осторожно.. что-то я не очень понял где упаковка? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 18:39 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
netivan, Код: c# 1. 2. 3. 4.
приведение значимых к интерфейсу не? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 18:50 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиnetivan, Код: c# 1. 2. 3. 4.
приведение значимых к интерфейсу не? да. все равно не понял причем тут упаковка. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 18:58 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
netivan, может так попонятней будет Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 19:03 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиnetivan, может так попонятней будет Код: c# 1. 2. 3. 4. 5.
завтра покумекаю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 19:12 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320Хотя, анонимные типы тут не причём. Вот так, например, всё работает Код: c# 1. 2. 3. 4. 5. 6.
o - у тя не является уже анонимным типом - что ты здесь хотел проверить? Дело как раз в неизменяемости анонимного типа, а не в упаковке-распаковке. Когда в анонимном типе структура - ее не изменить. Когда объект(или ссылка на интерфейс) ссылку тоже не изменить, но объект на которую указывает ссылка - пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 20:08 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
refreguser7320Хотя, анонимные типы тут не причём. Вот так, например, всё работает Код: c# 1. 2. 3. 4. 5. 6.
o - у тя не является уже анонимным типом - что ты здесь хотел проверить? Дело как раз в неизменяемости анонимного типа, а не в упаковке-распаковке. Когда в анонимном типе структура - ее не изменить. Когда объект(или ссылка на интерфейс) ссылку тоже не изменить, но объект на которую указывает ссылка - пожалуйста. Дело всё же в структуре, по-моему. Я привёл пример с кастомным классом My и с переменной var o. Если Му и без переменной, то не работает. Если анонимный класс и без переменной, то не работает. Если Му и с переменной, то работает. Если анонимный тип и с переменной, то работает. Значит, анонимный тип тут не причём. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 20:50 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320Если Му и без переменной, то не работает. Если анонимный класс и без переменной, то не работает . Если Му и с переменной, то работает. Если анонимный тип и с переменной, то работает.поправил ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 21:29 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
refreguser7320Если Му и без переменной, то не работает. Если анонимный класс и без переменной, то не работает . Если Му и с переменной, то работает. Если анонимный тип и с переменной, то работает.поправил Да, точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 21:42 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Ну, положим, анонимные типы действительно незименяемые в том смысле, что содержат рид-онли свойства. http://stackoverflow.com/questions/14336669/why-anonymous-type-are-immutable-in-c Но почему всё же нуль постоянно? Код: c# 1. 2. 3. 4. 5.
Вот возьмём строчку new { enumerator = new List<int> { 1, 2 }.GetEnumerator() } В ob.enumerator хранится копия энумератора из списка. Я так понимаю, ключ в том, что эта копия не имеет связи со списком ? Т. е. это объект структуры, вытащенный из объекта списка, и имеющий поэтому только MoveNext, Reset и Current, который по дефолту всегда 0? Теперь возьмём строчку ob.enumerator.MoveNext() ob.enumerator вернёт снова копию структуры, а значит, что Current снова будет 0. Но почему возвращается всегда true, а не false? Ведь со списком-то связи нет. Это что, особенность внтуренней реализации Enumerator.MoveNext() , что она всегда true возвращает в такой ситуации? А в общей картине получается, что у нас и в условии цикла и в теле постоянно создаются новые копии структуры. Т. е. на каждую итерацию по 2 копии структуры. Правильно я понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 22:08 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320, enumerator работает примерно так: Current=default(T) - 0 State=0 - готовность!!! (приватная переменная, мы не видим) MoveNext() - на выходе true - так как есть первый элемент Current=1 (первый элемент) State=1 - первый элемент показываем MoveNext() - на выходе true - так как есть второй элемент Current=2 (второй элемент) State=2 - второй элемент показываем MoveNext() - на выходе false - так как нет третьего элемента Current=хз (не определено) State=хз - не определено Так вот State мы в анонимном типе не можем изменить - впрочем, как и Current - они так нулями и остаются ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 22:35 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320, гыгыгыггыг у меня нет слов еще раз и последний ( я сто раз пожалел что не свалил отсюда, потерял весь день с вами..) while (ob.enumerator.MoveNext()) // получает новую структуру со списком, делает шаг { Console.Write(ob.enumerator.Current);// получает новую структуру со списком указатель позиции -1, шага нет, по контракту возвращает default(T) } и т.д и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2014, 22:35 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Чёта структуры какие-то замороченные. Слишком им много внимания надо уделять. new забудешь написать, и уже проблемы . После С++, где структуры это те же классы, непросто из головы вытолкать старые привычки и втолкнуть новые. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 12:20 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320Чёта структуры какие-то замороченные. оптимизация, ничего особенного ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 12:28 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320, авторПосле С++, где структуры это те же классы Давайте ++ трогать не будем, у Страуструппа и так судьба была не простой... хочу опять взорвать ваш мозг Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 12:48 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степи, ldfld vs ldflda ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 13:55 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
ЕвгенийВГде-то в степи, ldfld vs ldflda это следствие, а не причина ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 14:12 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320, Чет Вы меня удивляете, я вам в прошлом примере дал объяснения, вы промолчали - поняли, тут показал - опять молчание. а что же вы не кричали в прошлом примере - почему постоянно новая структура вылазит из анонимного типа, при обращению к полю? этот пример как бы продолжение первого. Поля помеченные модификатором readonly и которые описывают структуру , всегда при запросе выдают копию, можно как аксиому запомнить, в анонимных типах , там нет авто свойств, там есть свойство только с одним акцессором ( без мутатора), которое возвращает закрытое поле помеченное readonly , ну и исходя из этого инициализируемое через конструктор.. Структуры хитрая штука.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 17:09 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
к кстати кто пользуется решарпером, решарпер вежливо напоминает про эти нюансы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 17:12 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степи Структуры хитрая штука.. Потому и не делаю никогда своих. Выигрыш в производительности сомнительный, а проблем создают много! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 17:36 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
что мне попалось http://top.rbc.ru/economics/29/05/2014/927223.shtml#xtor=AL- [internal_traffic]--[rbc.ru]-[main_body]-[item_2] ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 17:40 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степичто мне попалось http://top.rbc.ru/economics/29/05/2014/927223.shtml#xtor=AL- [internal_traffic]--[rbc.ru]-[main_body]-[item_2] Начали за здравие, кончили за упокой. Какое отношение Паша Дуров имеет к внутренней организации LINQ? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 17:53 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
ЕвгенийВ, а что такого, я всегда иногда вставляю ссылки не по теме ( но имхо интер -я) да и ветка можно сказать закончена... или вы хотите еще загадку- вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 18:13 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, Чет Вы меня удивляете, я вам в прошлом примере дал объяснения, вы промолчали - поняли, тут показал - опять молчание. а что же вы не кричали в прошлом примере - почему постоянно новая структура вылазит из анонимного типа, при обращению к полю? этот пример как бы продолжение первого. Поля помеченные модификатором readonly и которые описывают структуру , всегда при запросе выдают копию, можно как аксиому запомнить, в анонимных типах , там нет авто свойств, там есть свойство только с одним акцессором ( без мутатора), которое возвращает закрытое поле помеченное readonly , ну и исходя из этого инициализируемое через конструктор.. Структуры хитрая штука.. Да я прошлый пример, вроде, уже понял. Но скоро опять забуду. )) Я это, как бы ещё и работать пытаюсь. Не всё же сидеть на форуме. ))) В любом случае, спасибо, что помогали понять. Где-то в степиили вы хотите еще загадку- вопрос? Вы их откуда берёте? А потом на собеседованиях джуниорам задаёте? :) Где-то в степичто мне попалось http://top.rbc.ru/economics/29/05/2014/927223.shtml#xtor=AL- [internal_traffic]--[rbc.ru]-[main_body]-[item_2] Всё правильно сделал. Только непонятно, почему в Литву (которая, на мой взгляд, сама является полудепрессивной страной - население убывает, экономика не на высоте), а не в Америку, Австралию, Канаду или Британию, которые, ходят слухи, являются раем для айти-компаний. Да и в последних скорее можно найти говорящих по-английски, чем в Литве, где надо ещё и по-литовски (а накой оно надо, язык местечковый, никому в мире не нужный изучать?). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 19:29 |
|
|
start [/forum/topic.php?fid=20&msg=38657385&tid=1402861]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 357ms |
total: | 487ms |
0 / 0 |