![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
Существует ли какой-нибудь способ на время отключить сборку мусора ?
В Ruby это делается так
В C# такой возможности кажется нет. Но возможно существую какие то обходные пути. |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Зачем? Нет, нельзя.
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Можно сделать это для конкретного объекта, метод GC.SuppressFinalize.
-------------------- ![]() |
|||
|
||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 2 Всего: 3 |
А зачем это надо?!
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
2mr.DUDA:
GC.SuppressFinalize - просто отменяет необходимость вызывать Finilize() для какого-то конкретного объекта. Но от этого GC только быстрее его съест. 2Exception: Ну например: Я выполняю действие которое выделяет и освобождает большое количество объектов. (Компиляция исходного кода из одного файла) На протяжении этого действия сборка может пройти несколько раз. Мне кажется с точки зрения производительности было бы логично отключить ее на время выполнения этого действия, а потом за ОДИН раз сразу убрать весь мусор. Временный перерасход памяти в данном случае не критичен. Или вот еще. Я выполняю сложный алгоритм, и я точно знаю что не освобождаю ссылок на объекты. Мусора просто нет. Тем не менее не исключина возможность того что GC будет запускаться и обходить дерево объектов и в поисках того чего нет. Я понимаю что эти сценарии не совсем однозначны. Но тем не менее я не вижу причин по которым в .NET отсутствует такая возможность. Вариант что авторы боялись что-то люди быдут часто стрелять себе в ногу не кактит, тогда бы они не предоставили доступа к unmanaged памяти через class Marshal. |
|||
|
||||
-ser- |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 1.2.2005 Репутация: 5 Всего: 13 |
отключить сборку мусора как таковой процесс, насколько мне известно, нельзя и это очень правильно. ты наверно хотел сказать, что также и не размещаешь память под объекты, в противном случае процесс GC нужен. и последнее, IMHO, если размер размещаемой памяти не меняется и ссылки не освобождаются (предположим такую утопию), то и GC запускаться не будет. -------------------- "Тонкая, однако, работа." |
|||
|
||||
Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
Почему ты так считаешь? Я не предлагаю часто пользоваться этой возможностью, но не вижу причин для полного ее исключения. Marshal - тоже не часто используют, но он есть! И это хорошо.
Нет я выделяю память, но меня устраевает интенсивный рост размера кучи. Я готов мериться со временной "утечкой". Все не выделенные объекты потом будут освобождены за одну сборку. (один проход по дереву объектов) При этом ни один из них не перейдет во старшее поколение. (это тоже плюс) |
|||
|
||||
Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Сильно не ругайте. Может быть скажу глупость, потому что никогда с этим не работал, а читать начал только сегодня. Заодно и узнаю, правильно я понял.
Так вот, как я понял, GC не будет подсчитывать ссылки на объект пока у того не закончиться время жизни. Получается если у объекта установить большое время жизни, то GC будет работать быстрее. Не так ли? -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
Ты что-то путаешь. Время жизни объекта - это просто время на протяжении которого он существует. Оно зависит от существования ссылок на него и от расторопности сборщика мусора. Это НЕ число которое ты можешь выставить программно. Это просто ВРЕМЯ ЖИЗНИ. (Совсем как у людей ![]() |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Время жизни объекта есть время, пока его значение отлично от null
![]() |
|||
|
||||
Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
А тогда к чему термин "аренда времени жизни" и интерфейс ISponsor?
Добавлено @ 17:28 Упс. ![]() ![]() ![]() Добавлено @ 17:31 Прикольно, когда не знаешь, еще и путаешь. ![]() З.Ы. Это я про себя. Это сообщение отредактировал(а) Naum - 16.10.2006, 17:24 -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Ага, именно так. Это нужно для классов, реализующих IDisposable, чтобы не вызывать финалайзер, если уже вызывали Dispose. А если память кончится? |
|||
|
||||
Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
||||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
ну тогда решение такое: сохранять ссылки на все создаваемые объекты где-нибудь в одном контейнере и убивать его после отработки алгоритма ![]() -------------------- qqq |
||||
|
|||||
Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
Сборшик мусора всеравно (даже гораздо чаще!) будет анализировать граф объектов в тщетных попытках найти мусор. => Цель не достигнута. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |