Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
1

Правда ли что ламбда-выражения неправильно построены и не освобождают ресурсы

15.08.2012, 11:21. Показов 1525. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В одном из буржуйских форумов нашел информацию, но не до конца все было понятно.
Вопрос к специалистам, правда ли что ламбда-выражения неправильно построены не освобождают ресурсы, как там было описано, что к примеру вот такая конструкция не освобождает ресурсы
C#
1
2
3
4
5
this.Invoke( (Action)delegate
{
    this.Text = this.DisplayText;
    //ну и т.д.
} );
а вот такая освобождает
C#
1
2
3
4
5
6
Action<Control> act = ( me ) =>
{
    me.Text = ( me as AMButton ).DisplayText;
    //ну и т.д.
};
act.Invoke( this );
как бы получается, что ламбда-выражение, преобразуясь в делегат, в первом случае не уничтожается сборщиком мусора, т.к. есть прямая ссылка на this, а во втором случае мы передаем ссылку на this в параметр, после выполнения делегат не имея ссылок может быть удален.
Жду советов по этому поводу, т.к. наблюдаю в своей программе утечки памяти, а таких ламбда-выражений как первый вариант у меня немало.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.08.2012, 11:21
Ответы с готовыми решениями:

Вычесление простейшего выражения. народ если несложно обьясните что я зделал здесь неправильно и наглядным образом чтобы я понял как что делать.
Нужно вычислить выражения 2*17/7-1708/17*1992. Пожалуйста, зарание благодарен. .386 . model...

Ответ в виде "правда" или "ложь" на "а правда ли что" с определенным условие №1
Нужна помощь с екселем

Ответ в виде "правда" или "ложь" на "а правда ли что" с определенным условие №2
Нужна помощь с екселем

Правда, что если заменить что-то из внутренностей, то винда слетает?
Правда, что нельзя менять внутренности и лицензионная винда слетает? Надеюсь с ней ничего не...

11
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
15.08.2012, 11:34 2
Цитата Сообщение от Sanprof Посмотреть сообщение
C#
1
2
3
4
5
this.Invoke( (Action)delegate
{
   this.Text = this.DisplayText;
   //ну и т.д.
} );
Разве это лямбда-выражение? по-моему обычный делегат..

Добавлено через 1 минуту
Цитата Сообщение от Sanprof Посмотреть сообщение
наблюдаю в своей программе утечки памяти
Может это не утечки а сборщик просто позже запускается.
0
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
15.08.2012, 14:56  [ТС] 3
Цитата Сообщение от Noob.net Посмотреть сообщение
Разве это лямбда-выражение? по-моему обычный делегат..
ну это понятно, что лямбда-выражение присутствует во второй конструкции, все равно все преобразуется к делегату.

Не по теме:

Вобщем вопрос был не в том где я описался.



Добавлено через 1 минуту
Цитата Сообщение от Noob.net Посмотреть сообщение
Может это не утечки а сборщик просто позже запускается
я пробовал конструкции кода, где GC запускался каждую минуту и все равно наблюдал утечки памяти.

Добавлено через 1 час 8 минут
просто заменив все старые простенькие конструкции на новые, вот уже сутки память скачет +- вокруг одного значения ну и все же немного в +.

Добавлено через 2 часа 10 минут
и где же ГУРУ .NET программирования???
0
Noob.net
15.08.2012, 15:57
  #4

Не по теме:

Цитата Сообщение от Sanprof Посмотреть сообщение
и где же ГУРУ .NET программирования???
Есть послабее,мнение подкинуть?

0
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
15.08.2012, 17:40  [ТС] 5
Цитата Сообщение от Noob.net Посмотреть сообщение
Есть послабее,мнение подкинуть?
да, я готов выслушать все варианты.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
15.08.2012, 18:26 6
Делегат это всего лишь ссылка,а когда во 2 варианте использовал лямбду создал локальные переменные которые скорее всего и удалились,

тогда как в 1 варианте не все ресурсы локальные и не все будут удалятся.Вряд ли на ссылке можно много памяти потерять.

Думаю время жизни локальных переменных не изменится от типа создания делегата. Может проблема кроется в this.Invoke()

Добавлено через 4 минуты
Цитата Сообщение от Sanprof Посмотреть сообщение
я пробовал конструкции кода, где GC запускался каждую минуту
Ты должен знать,что от этого больше ресурсов не станет,это только "возможно",если GC передумает.
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
15.08.2012, 18:50 7
Возьмите в руки любой профайлер, запустите цикл на over9000 итераций и посмотрите происходит ли утечка в лямбдах или все таки по вашей вине
0
Заблокирован
15.08.2012, 21:52 8
Цитата Сообщение от Sanprof Посмотреть сообщение
В одном из буржуйских форумов нашел информацию, но не до конца все было понятно.
Дай ссылку.

Цитата Сообщение от Sanprof Посмотреть сообщение
Вопрос к специалистам, правда ли что ламбда-выражения неправильно построены не освобождают ресурсы
Нет, не правда.

Цитата Сообщение от Sanprof Посмотреть сообщение
как бы получается, что ламбда-выражение, преобразуясь в делегат, в первом случае не уничтожается сборщиком мусора, т.к. есть прямая ссылка на this, а во втором случае мы передаем ссылку на this в параметр, после выполнения делегат не имея ссылок может быть удален.
Я вообще не понял, о каких не освобождающихся ресурсах в данном случае речь идёт.
0
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
16.08.2012, 09:59  [ТС] 9
Цитата Сообщение от Yukikaze Посмотреть сообщение
Возьмите в руки любой профайлер
а можете дать ссылочку где скачать профайлер под VS 2010 Express.
0
Эксперт .NET
 Аватар для kolorotur
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,229
17.08.2012, 03:40 10
Цитата Сообщение от Sanprof Посмотреть сообщение
вот такая конструкция не освобождает ресурсы, а вот такая освобождает
О каких ресурсах идет речь?
Если о самом делегате, то брехня - освобождается в обоих случаях.

Другое дело, что в первом случае не будет освобожден тот объект, который this, до тех пор, пока жив делегат, т.к. на него имеется ссылка.
Вероятно, именно об этом и говорили на буржуйском форуме.
0
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
17.08.2012, 10:53  [ТС] 11
просто я вот переделал все старые конструкции на новые, пока за двое суток полет нормальный (точно ничего другого не менял по коду), а с прошлым кодом уже бы съело ~50 Мб виртуальной памяти. Мне так кажется, конечно не могу утверждать, что делегат жив пока живы ссылки на объекты используемые в нем, вот чего-то мне так кажется, иначе как объяснить, что после переделки на новые конструкции перестало есть память.
0
Эксперт .NET
 Аватар для kolorotur
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,229
17.08.2012, 13:04 12
Sanprof, наоборот - объекты, на которые имеются ссылки в делегате, будуть жить до тех пор, пока жив сам делегат.
А делегат, в свою очередь, будет жить до тех пор, пока где-то имеются ссылки на него.
0
17.08.2012, 13:04
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.08.2012, 13:04
Помогаю со студенческими работами здесь

Правда ли, что Линус Товальдс работает в Microsoft? А-а-а? Что теперь скажут Windows ненавистники?
Нашёл вот эту новость и вот стало интересно правда ли? Кто, что думает? Вот часть новости: ...

А что, правда, что Яндекс рассорился почти
со всеми рекламными агентствами из-за цен, и пытается теперь работать напрямую с клиентами?

Проверьте задачку по циклам, неправильно работает. [думаю что неправильно]
Спасибо что решили зайти. Задание выгладит так: http://*******/PW95p А результат выплнения:...

Объекты не освобождают память
есть сложный объект представляющий собой страницу сайта. конструктор: hp=new pages.history();...

Lisp ламбда-функционалы
помогите пожалуйста с лабой условие: задано 3 списка целых чисел. с помощью...

Правда что new очень медленная?
Вобщем читал статейки в интернете про операцию new, утечки памяти и функци, которые возвращают...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru