|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиПоля помеченные модификатором readonly и которые описывают структуру , всегда при запросе выдают копию Так вроде, все структуры и так выдают копию при запросе? Кстати, когда вы ввели в структуру метод, изменяющий её поле, вы сделали свою структуру мутабельной? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 19:42 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Что интересно, под дебагом внутри метода Addint для перового экземпляра структуры видно, что поле изменяется и равно 100. А когда вышли из этого метода - поле снова равно 0. Это почему? Мой ответ: потому, что это не поле в методе, а его копия в виде локальной переменной. И изменилась с 0 до 100 копия, а не поле. Когда метод закончился, локальная переменная досталась сборщику мусора, а поле осталось неизменным. Правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 19:52 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиПоля помеченные модификатором readonly и которые описывают структуру , всегда при запросе выдают копию, можно как аксиому запомнить А откуда эта аксиома выводится? Я вот МСДН читаю, и там не нахожу такого в одном месте. Это что, надо по крупицам собирать из нескольких статей? Ну, при попытке сделать так w.Struct.Id = w.Struct.Id + 2; компилятор выдаёт такое Members of readonly field 'ConsoleApplication1.Program.MyClass.Struct' cannot be modified (except in a constructor or a variable initializer А если бы Struct был не структурой, а классом, пусть даже под readonly, то всё нормально меняется. Т. е. где-то в компиляторе есть такое правило, но в явном виде оно нигде не упоминается? Т. е. пока на нечто такое не наткнёшься, не поймёшь? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 20:07 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320, вот аксиома user7320Когда метод закончился, локальная переменная досталась сборщику мусора ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 20:13 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Я тут посмотрел. Похоже, что, чтобы это понять, надо просто запомнить маааленький алгоритмец доступа к членам http://msdn.microsoft.com/en-us/library/aa691353(v=vs.71).aspx Этакий набор аксиом, хе-хе. Лично я никуя не понял и закрыл это дело. До лучших времён. Голову можно сломать. Доступ к членам в С# - это просто! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 20:16 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320Я тут посмотрел. Похоже, что, чтобы это понять, надо просто запомнить маааленький алгоритмец доступа к членам http://msdn.microsoft.com/en-us/library/aa691353(v=vs.71).aspx Этакий набор аксиом, хе-хе. Лично я никуя не понял и закрыл это дело. До лучших времён. Голову можно сломать. Доступ к членам в С# - это просто! В смысле, что там есть вариант ридонли структур, только я его не нашёл - там для меня какая-то каша. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 20:19 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
авторOne unfortunate design weakness in .net is that there is no means by which struct methods can indicate whether or not they will modify this. Из дырявых абстракций прямо хлещет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 20:25 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Да ну нафиг эти структуры! Я ж теперь их как огня бояться буду! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 20:26 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
http://blogs.msdn.com/b/ericlippert/archive/2008/05/14/mutating-readonly-structs.aspx The relevant section of the specification is 7.5.4, which states that when resolving "E.I" where E is an object and I is a field... ...if the field is readonly and the reference occurs outside an instance constructor of the class in which the field is declared, then the result is a value, namely the value of the field I in the object referenced by E. The important word here is that the result is the value of the field, not the variable associated with the field. Readonly fields are not variables outside of the constructor. (The initializer here is considered to be inside the constructor; see my earlier post on that subject.) Great. What about that second dot, as in ".Mutate()"? We look at section 7.4.4 to find out how to invoke E.M(): Ну, мля, так нечестно! Они напридумывали там своих дырявых абстракций десятиуровневых. Они в этом аду варятся каждый день, а прикладным разработчикам задачи решать надо, а не в тонкостях языка разбираться. Прикладные разработчики только время от времени в это дело лезут, и сразу обратно, махнув рукой. Лучше раз в сутки сервера с утекающей памятью перегружать, чем разбираться в этой мозголомной помойке, которая, к тому же, через лет 5-7 снова станет не нужной МС и она снова сменит тренд. Липперт за мозголомство бабки получает, а я - за решение задач. Как грица, думать надо меньше, а соображать - больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 20:34 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Короче, кто осилил в спецификацию Сишарпа и может все эти section 7.5.4, section 7.x.y и пр. в голове одновременно и в разных вариациях держать на каждую строчку кода (а вдруг чего не так?! - оппа, справочка под рукой) - прётся, остальные могут идти накуй запоминают кучку "аксиом" в количестве нескольких тысяч штук на весь язык - всего лишь другой вариант спецификации. Короче, жопа с какой стороны ни посмотри. Конечно, Решарпер это хорошо. Но почему сама Студия или компилятор не подсказывают? Из первых комментариев к этой статье я так понял, что Решарпер где-то в средней категории и работает - где дизайнеры C# не решились вставить сообщение об ошибке или предупреждение, Решарпер решился. Вот это вот авторError 1 Members of readonly field 'ConsoleApplication1.Program.MyClass.Struct' cannot be modified (except in a constructor or a variable initializer) мало инфы даёт, потому что не уточняет, что это только для структур. Кажется, что это для всех ридонли членов, но по факту для ридонли классов-то таких ограничений нет. А вот этого из ошибки и не ясно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2014, 20:49 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320Что интересно, под дебагом внутри метода Addint для перового экземпляра структуры видно, что поле изменяется и равно 100. А когда вышли из этого метода - поле снова равно 0. Это почему? Мой ответ: потому, что это не поле в методе, а его копия в виде локальной переменной. И изменилась с 0 до 100 копия, а не поле. Когда метод закончился, локальная переменная досталась сборщику мусора, а поле осталось неизменным. Правильно?Нет. Думаю, уже сам это понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 11:00 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, вот аксиома user7320Когда метод закончился, локальная переменная досталась сборщику мусораИ, совсем не аксиома. В общем случае это не так. И, конкретно, в рассматриваемом примере это не так ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 11:03 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
refreg, вы тоже считаете что сборщик проверяет локальные переменные при удалении? чистка стека это очень просто, передвигаем указатель в низ до первого еще живого, и все сборщику ваще до фонаря до локальных п. значимые ему не интересны, указатель на кучу тоже.. может имелось в виду, локальная переменная замкнутая на лябду - так она уже не локальная она в куче через служебный класс... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 11:13 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиrefreg, вы тоже считаете что сборщик проверяет локальные переменные при удалении? чистка стека это очень просто, передвигаем указатель в низ до первого еще живого, и все сборщику ваще до фонаря до локальных п. значимые ему не интересны, указатель на кучу тоже.. может имелось в виду, локальная переменная замкнутая на лябду - так она уже не локальная она в куче через служебный класс...Вот сейчас согласен. Сборщику мусора плевать на структуру. Если, только она не упакована. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 11:20 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
refreg, Говорить о сборщике и стеке это вообще бессмысленно. У сборщика своя жизнь - у стека своя, и нигде они не пересеваются Вообще сборщик может не вызваться никогда за время жизни приложения , и что тогда ? стек впадет в уныние...? ЕвгенийПотому и не делаю никогда своих. Выигрыш в производительности сомнительный, а проблем создают много! где то читал , раз спросили Липперта, чем Вы руководствуетесь выбирая структуру и класс. он ответил - поведением типа, ему - так вроде ж очевидно одна там другая тут лежит?. Он ответил - поведение важнее, где лежит это уже вторично.. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 12:36 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
Где-то в степиrefreg, Говорить о сборщике и стеке это вообще бессмысленно.С этим согласен. Тогда объясните, что Вы тут 16099524 назвали аксиомой. Или просто указали, что переменная не нужна, оборотом "сборщик мусора" (я понимаю, что там цитата, не Ваша речь). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 13:27 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
refreg, так это тролинг, я и хотел выяснить что это было авторКогда метод закончился, локальная переменная досталась сборщику мусора или парапраксис или тонкий троллинг или неудачный выстрел в голову при чистке оружия.... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2014, 13:45 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320 Липперт за мозголомство бабки получает, а я - за решение задач. Эрик один самых толковых среди ныне живущих и уже давно не работает в Microsoft. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 08:29 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
ЕвгенийВuser7320 Липперт за мозголомство бабки получает, а я - за решение задач. Эрик один самых толковых среди ныне живущих и уже давно не работает в Microsoft. Я к тому, что в Сишарпе уже настолько всё переусложнили, что знать все тонкости в любой момент может разве что этот Эрик и ему подобные, которые годами спецификацию Сишарпа грызут. А люди, которые не теорию учат, а должны решать задачи, просто уже не в состоянии угнаться за всеми нюансами языка... И при всём при этом абстракции у них всё равно изрядно протекают - т. е. таки спецификация начинает походить не на логически отстроенную систему, а на сборник кейсов и исключений, который надо не понять, а тупо запомнить. А чтобы понять, откуда эти исключения взялись - таки вылезти за рамки спецификации и посмотреть, что внутрях. Они бы хоть вычёркивали всякое, которое в Сишарпе уже устарело. Ну, не знаю... Взять ту же книжку "C# in Depth" Скита - он там приводит разные кейсы на разные аспекты языка и как они изменялись от версии 2.0 к версии 4.0. Вот почему бы не оставить всерсию 4.0, а на остальное забить? Да я понимаю, что совместимость и всё такое, но от обилия "как сделать одно и то же кучей разных способов" уже в голове калейдоскоп и это ведёт скорее не к гибкости языка, а к увеличению количества ошибок. Сишарп хорош тем, что пока говна в нём поменьше, чем в той же Джаве, а возможностей побольше в общем и целом. Не принимайте близко к сердцу - это мнение диванного аналитика. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 22:08 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320, И где ты в java говно видишь, уточни. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 23:06 |
|
Почему LINQ такой тормозной?
|
|||
---|---|---|---|
#18+
user7320, Да бросьте свою истерику, язык как язык, скажу более ( имхо) писать можно на нем как хочешь и куда хочешь, не утруждая себя знаниями и т.д. ( например можно забыть что такое энумератор, можно перечисление назвать деревом выражений, и них-я, скомпилится родной)) автор а на сборник кейсов и исключений, который надо не понять, а тупо запомнить дак если не понимаете, приходится запоминать как аксиому, например замыкать на ref out незя..., в джаве или С вас бы в угол запинали да системником припечатали, а тут ( в этом языке все в порядке вещей) Зы в нем не говна меньше, в нем просто любое говно может писать любое говно... ( сборщике подтерет ) :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2014, 23:22 |
|
|
start [/forum/topic.php?fid=20&msg=38658153&tid=1402861]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 336ms |
total: | 477ms |
0 / 0 |