powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему LINQ такой тормозной?
22 сообщений из 72, страница 3 из 3
Почему LINQ такой тормозной?
    #38657456
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиПоля помеченные модификатором readonly и которые описывают структуру , всегда при запросе выдают копию
Так вроде, все структуры и так выдают копию при запросе?

Кстати, когда вы ввели в структуру метод, изменяющий её поле, вы сделали свою структуру мутабельной?
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657461
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что интересно, под дебагом внутри метода Addint для перового экземпляра структуры видно, что поле изменяется и равно 100. А когда вышли из этого метода - поле снова равно 0. Это почему?

Мой ответ: потому, что это не поле в методе, а его копия в виде локальной переменной. И изменилась с 0 до 100 копия, а не поле. Когда метод закончился, локальная переменная досталась сборщику мусора, а поле осталось неизменным. Правильно?
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657463
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиПоля помеченные модификатором 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, то всё нормально меняется.

Т. е. где-то в компиляторе есть такое правило, но в явном виде оно нигде не упоминается?

Т. е. пока на нечто такое не наткнёшься, не поймёшь?
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657464
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
вот аксиома
user7320Когда метод закончился, локальная переменная досталась сборщику мусора
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657467
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут посмотрел. Похоже, что, чтобы это понять, надо просто запомнить маааленький алгоритмец доступа к членам
http://msdn.microsoft.com/en-us/library/aa691353(v=vs.71).aspx

Этакий набор аксиом, хе-хе.

Лично я никуя не понял и закрыл это дело. До лучших времён. Голову можно сломать. Доступ к членам в С# - это просто!
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657469
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Я тут посмотрел. Похоже, что, чтобы это понять, надо просто запомнить маааленький алгоритмец доступа к членам
http://msdn.microsoft.com/en-us/library/aa691353(v=vs.71).aspx

Этакий набор аксиом, хе-хе.

Лично я никуя не понял и закрыл это дело. До лучших времён. Голову можно сломать. Доступ к членам в С# - это просто!
В смысле, что там есть вариант ридонли структур, только я его не нашёл - там для меня какая-то каша.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657472
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор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.

Из дырявых абстракций прямо хлещет.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657474
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну нафиг эти структуры! Я ж теперь их как огня бояться буду!
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657479
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 снова станет не нужной МС и она снова сменит тренд. Липперт за мозголомство бабки получает, а я - за решение задач.

Как грица, думать надо меньше, а соображать - больше.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657485
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, кто осилил в спецификацию Сишарпа и может все эти 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)

мало инфы даёт, потому что не уточняет, что это только для структур. Кажется, что это для всех ридонли членов, но по факту для ридонли классов-то таких ограничений нет. А вот этого из ошибки и не ясно.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657621
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Что интересно, под дебагом внутри метода Addint для перового экземпляра структуры видно, что поле изменяется и равно 100. А когда вышли из этого метода - поле снова равно 0. Это почему?

Мой ответ: потому, что это не поле в методе, а его копия в виде локальной переменной. И изменилась с 0 до 100 копия, а не поле. Когда метод закончился, локальная переменная досталась сборщику мусора, а поле осталось неизменным. Правильно?Нет. Думаю, уже сам это понял.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657625
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
вот аксиома
user7320Когда метод закончился, локальная переменная досталась сборщику мусораИ, совсем не аксиома. В общем случае это не так. И, конкретно, в рассматриваемом примере это не так
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657630
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,
вы тоже считаете что сборщик проверяет локальные переменные при удалении?
чистка стека это очень просто, передвигаем указатель в низ до первого еще живого, и все
сборщику ваще до фонаря до локальных п. значимые ему не интересны, указатель на кучу тоже..
может имелось в виду, локальная переменная замкнутая на лябду - так она уже не локальная
она в куче через служебный класс...
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657634
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиrefreg,
вы тоже считаете что сборщик проверяет локальные переменные при удалении?
чистка стека это очень просто, передвигаем указатель в низ до первого еще живого, и все
сборщику ваще до фонаря до локальных п. значимые ему не интересны, указатель на кучу тоже..
может имелось в виду, локальная переменная замкнутая на лябду - так она уже не локальная
она в куче через служебный класс...Вот сейчас согласен. Сборщику мусора плевать на структуру. Если, только она не упакована.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657661
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,
Говорить о сборщике и стеке это вообще бессмысленно.
У сборщика своя жизнь - у стека своя, и нигде они не пересеваются
Вообще сборщик может не вызваться никогда за время жизни приложения ,
и что тогда ? стек впадет в уныние...?
ЕвгенийПотому и не делаю никогда своих. Выигрыш в производительности сомнительный, а проблем создают много!
где то читал , раз спросили Липперта, чем Вы руководствуетесь выбирая структуру и класс.
он ответил - поведением типа, ему - так вроде ж очевидно одна там другая тут лежит?.
Он ответил - поведение важнее, где лежит это уже вторично..
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657674
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиrefreg,
Говорить о сборщике и стеке это вообще бессмысленно.С этим согласен. Тогда объясните, что Вы тут 16099524 назвали аксиомой.
Или просто указали, что переменная не нужна, оборотом "сборщик мусора" (я понимаю, что там цитата, не Ваша речь).
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657676
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,
так это тролинг, я и хотел выяснить
что это было
авторКогда метод закончился, локальная переменная досталась сборщику мусора
или парапраксис или тонкий троллинг или неудачный выстрел в голову при чистке оружия....
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38657917
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320 Липперт за мозголомство бабки получает, а я - за решение задач.

Эрик один самых толковых среди ныне живущих и уже давно не работает в Microsoft.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38658153
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВuser7320 Липперт за мозголомство бабки получает, а я - за решение задач.

Эрик один самых толковых среди ныне живущих и уже давно не работает в Microsoft.
Я к тому, что в Сишарпе уже настолько всё переусложнили, что знать все тонкости в любой момент может разве что этот Эрик и ему подобные, которые годами спецификацию Сишарпа грызут. А люди, которые не теорию учат, а должны решать задачи, просто уже не в состоянии угнаться за всеми нюансами языка... И при всём при этом абстракции у них всё равно изрядно протекают - т. е. таки спецификация начинает походить не на логически отстроенную систему, а на сборник кейсов и исключений, который надо не понять, а тупо запомнить. А чтобы понять, откуда эти исключения взялись - таки вылезти за рамки спецификации и посмотреть, что внутрях.

Они бы хоть вычёркивали всякое, которое в Сишарпе уже устарело. Ну, не знаю... Взять ту же книжку "C# in Depth" Скита - он там приводит разные кейсы на разные аспекты языка и как они изменялись от версии 2.0 к версии 4.0. Вот почему бы не оставить всерсию 4.0, а на остальное забить? Да я понимаю, что совместимость и всё такое, но от обилия "как сделать одно и то же кучей разных способов" уже в голове калейдоскоп и это ведёт скорее не к гибкости языка, а к увеличению количества ошибок.

Сишарп хорош тем, что пока говна в нём поменьше, чем в той же Джаве, а возможностей побольше в общем и целом.

Не принимайте близко к сердцу - это мнение диванного аналитика.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38658167
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

И где ты в java говно видишь, уточни.
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38658168
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
Да бросьте свою истерику, язык как язык, скажу более ( имхо) писать можно на нем как хочешь и куда хочешь, не утруждая себя
знаниями и т.д. ( например можно забыть что такое энумератор, можно перечисление назвать деревом выражений, и них-я, скомпилится родной))
автор а на сборник кейсов и исключений, который надо не понять, а тупо запомнить
дак если не понимаете, приходится запоминать как аксиому, например замыкать на ref out незя...,
в джаве или С вас бы в угол запинали да системником припечатали, а тут ( в этом языке все в порядке вещей)
Зы в нем не говна меньше, в нем просто любое говно может писать любое говно... ( сборщике подтерет ) :)
...
Рейтинг: 0 / 0
Почему LINQ такой тормозной?
    #38658190
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всю жисть юзал линкью и ни о чем таком не думал.

Я вапасносте???
...
Рейтинг: 0 / 0
22 сообщений из 72, страница 3 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему LINQ такой тормозной?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]