Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отключить Garbage Collector, на время 
:(
    Опции темы
Djuffin
Дата 12.10.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 18.3.2005

Репутация: 1
Всего: 2



Существует ли какой-нибудь способ на время отключить сборку мусора ? 

В Ruby это делается так
Код

GC.disable()


В C# такой возможности кажется нет. Но возможно существую какие то обходные пути.
PM MAIL   Вверх
Exception
Дата 12.10.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Зачем? Нет, нельзя.
PM   Вверх
mr.DUDA
Дата 13.10.2006, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Можно сделать это для конкретного объекта, метод GC.SuppressFinalize.


--------------------
user posted image
PM MAIL WWW   Вверх
Prehistorik
Дата 13.10.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 30.5.2006
Где: СПб

Репутация: 2
Всего: 3



А зачем это надо?!
--------------------
Есть только один бог - Ассемблер, и С - пророк его. 
PM MAIL   Вверх
Djuffin
Дата 13.10.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 18.3.2005

Репутация: 1
Всего: 2



2mr.DUDA:
GC.SuppressFinalize - просто отменяет необходимость вызывать Finilize() для какого-то конкретного объекта. Но от этого GC только быстрее его съест.

2Exception: 
Ну например:
Я выполняю действие которое выделяет и освобождает большое количество объектов. (Компиляция исходного кода из одного файла)
На протяжении этого действия сборка может пройти несколько раз. Мне кажется с точки зрения производительности было бы логично отключить ее на время выполнения этого действия, а потом за ОДИН раз сразу убрать весь мусор. Временный перерасход памяти в данном случае не критичен.

Или вот еще.
Я выполняю сложный алгоритм, и я точно знаю что не освобождаю ссылок на объекты.  Мусора просто нет.  Тем не менее не исключина возможность того что GC будет запускаться и обходить дерево объектов и в поисках того чего нет.

Я понимаю что эти сценарии не совсем однозначны. Но тем не менее  я не вижу причин по которым в .NET отсутствует такая возможность.
Вариант что авторы боялись что-то люди быдут часто стрелять себе в ногу не кактит, тогда бы они не предоставили доступа к unmanaged памяти через class Marshal.
PM MAIL   Вверх
-ser-
Дата 15.10.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 5
Всего: 13



Цитата(Djuffin @  12.10.2006,  20:59 Найти цитируемый пост)
Существует ли какой-нибудь способ на время отключить сборку мусора ? 

отключить сборку мусора как таковой процесс, насколько мне известно, нельзя и это очень правильно.

Цитата(Djuffin @  13.10.2006,  09:10 Найти цитируемый пост)
Я выполняю сложный алгоритм, и я точно знаю что не освобождаю ссылок на объекты.  Мусора просто нет.  Тем не менее не исключина возможность того что GC будет запускаться 

ты наверно хотел сказать, что также и не размещаешь память под объекты, в противном случае процесс GC нужен.

и последнее, IMHO, если размер размещаемой памяти не меняется и ссылки не освобождаются (предположим такую утопию), то и GC запускаться не будет.



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
Djuffin
Дата 15.10.2006, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 18.3.2005

Репутация: 1
Всего: 2



Цитата(-ser- @  15.10.2006,  13:18 Найти цитируемый пост)
 нельзя и это очень правильно.

Почему ты так считаешь?
Я не предлагаю часто пользоваться этой возможностью, но не вижу причин для полного ее исключения. 
Marshal - тоже не часто используют, но он есть! И это хорошо.

Цитата(-ser- @  15.10.2006,  13:18 Найти цитируемый пост)
ты наверно хотел сказать, что также и не размещаешь память под объекты, в противном случае процесс GC нужен.

Нет я выделяю память, но меня устраевает интенсивный рост размера кучи. Я готов мериться со временной "утечкой". 
Все не выделенные объекты потом будут освобождены за одну сборку. (один проход по дереву объектов)
При этом ни один из них не перейдет во старшее поколение. (это тоже плюс)



PM MAIL   Вверх
Naum
Дата 16.10.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Сильно не ругайте. Может быть скажу глупость, потому что никогда с этим не работал, а читать начал только сегодня. Заодно и узнаю, правильно я понял.
Так вот, как я понял, GC не будет подсчитывать ссылки на объект пока у того не закончиться время жизни. Получается если у объекта установить большое время жизни, то GC будет работать быстрее. 
Не так ли?


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Djuffin
Дата 16.10.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 18.3.2005

Репутация: 1
Всего: 2



Цитата(Naum @  16.10.2006,  14:47 Найти цитируемый пост)
Так вот, как я понял, GC не будет подсчитывать ссылки на объект пока у того не закончиться время жизни. Получается если у объекта установить большое время жизни, то GC будет работать быстрее. 

Ты что-то путаешь.
Время жизни объекта - это просто время на протяжении которого он существует. Оно зависит от существования ссылок на него и от расторопности сборщика мусора. Это НЕ число которое ты можешь выставить программно. Это просто ВРЕМЯ ЖИЗНИ. (Совсем как у людей smile)
PM MAIL   Вверх
Exception
Дата 16.10.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Время жизни объекта есть время, пока его значение отлично от null smile .
PM   Вверх
Naum
Дата 16.10.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



А тогда к чему термин "аренда времени жизни" и интерфейс ISponsor?

Добавлено @ 17:28 
Упс. smile  Кажись я вообще не про то.  smile  smile

Добавлено @ 17:31 
Цитата(Djuffin @  16.10.2006,  17:55 Найти цитируемый пост)
Ты что-то путаешь.


Прикольно, когда не знаешь, еще и путаешь.  smile 

З.Ы. Это я про себя.

Это сообщение отредактировал(а) Naum - 16.10.2006, 17:24


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
arilou
Дата 17.10.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Djuffin @  13.10.2006,  09:10 Найти цитируемый пост)
2mr.DUDA:
GC.SuppressFinalize - просто отменяет необходимость вызывать Finilize() для какого-то конкретного объекта. Но от этого GC только быстрее его съест.

Ага, именно так. Это нужно для классов, реализующих IDisposable, чтобы не вызывать финалайзер, если уже вызывали Dispose.

Цитата(Djuffin @  15.10.2006,  19:13 Найти цитируемый пост)
Я готов мериться со временной "утечкой". 

А если память кончится?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Djuffin
Дата 17.10.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 18.3.2005

Репутация: 1
Всего: 2



Цитата(arilou @  17.10.2006,  16:46 Найти цитируемый пост)
А если память кончится?

Код

catch (OutOfMemoryException E)


Но я думаю этого не случиться. smile

PM MAIL   Вверх
maxim1000
Дата 17.10.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



Цитата(Djuffin @  15.10.2006,  18:13 Найти цитируемый пост)
Нет я выделяю память, но меня устраевает интенсивный рост размера кучи. Я готов мериться со временной "утечкой".


Цитата(Djuffin @  16.10.2006,  15:55 Найти цитируемый пост)
Время жизни объекта - это просто время на протяжении которого он существует. Оно зависит от существования ссылок на него и от расторопности сборщика мусора.


ну тогда решение такое: сохранять ссылки на все создаваемые объекты где-нибудь в одном контейнере и убивать его после отработки алгоритма  smile 


--------------------
qqq
PM WWW   Вверх
Djuffin
Дата 17.10.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 18.3.2005

Репутация: 1
Всего: 2



Цитата(maxim1000 @  17.10.2006,  18:01 Найти цитируемый пост)
ну тогда решение такое: сохранять ссылки на все создаваемые объекты где-нибудь в одном контейнере и убивать его после отработки алгоритма    

Сборшик мусора всеравно (даже гораздо чаще!) будет анализировать граф объектов в тщетных попытках найти мусор. => Цель не достигнута.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.