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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очистка памяти, Очистка памяти в c# 
:(
    Опции темы
_prishelec_
Дата 13.8.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!
Интересует такой вопрос: приложение написано на c#, и при его сворачивании (минимизирование окна) сбрасывается оперативная память. К примеру приложение занимало метров 30, после минимизации уже метров 2-4. Как можно это делать программно?

Уже несколько часов юзаю System.Diagnosticsю.Process.GetCurrentProcess(), пока толкового решения не нашел?

PM MAIL WWW ICQ Skype   Вверх
Voyager
Дата 13.8.2010, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

        [System.Runtime.InteropServices.DllImport("psapi.dll")]
        static extern int EmptyWorkingSet(IntPtr hwProc);

        static void ClearMemory()
        {
            try
            {
                EmptyWorkingSet(System.Diagnostics.Process.GetCurrentProcess().Handle);
            }
            catch
            {
            }
        }

PM   Вверх
gambit
Дата 13.8.2010, 19:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Принудительно вызвать GC. Он освободит все не использованные ресурсы. Хотя MS этого не советуют, GC сам все сделает, когда он будет нужен. Кроме того, зачем? У вас на столько мало памяти, что надо контролировать приложение?
PM MAIL ICQ Skype   Вверх
azesmcar
Дата 13.8.2010, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 6
Всего: 211



Цитата(gambit @  13.8.2010,  19:11 Найти цитируемый пост)
Принудительно вызвать GC. 

 smile 
Код

GC.Collect();

если быть точнее.

Цитата(gambit @  13.8.2010,  19:11 Найти цитируемый пост)
У вас на столько мало памяти, что надо контролировать приложение?

тогда CLR сам очистит память..опять же нет нужды вызывать самому smile 
PM   Вверх
ДобренькийПапаша
Дата 13.8.2010, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



_prishelec_
Трогать сборщик мусора вообще не рекомендуется. Делать этого не надо даже тогда, когда кажется, что надо. GC трогать действительно следует в 1% случаев из тех, когда приходит такая мысль в голову.

Обычно GC затрагивается программно, когда создаются одноразовые объекты (реализующие IDisposable), а по спецификации, такие объекты ещё и финализатор должны определить. Таким образом GC будет затронут программно.

Какие ещё возможны случаи - даже не знаю)))

Это сообщение отредактировал(а) ДобренькийПапаша - 13.8.2010, 19:53


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
_prishelec_
Дата 13.8.2010, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(gambit @ 13.8.2010,  19:11)
Принудительно вызвать GC. Он освободит все не использованные ресурсы. Хотя MS этого не советуют, GC сам все сделает, когда он будет нужен. Кроме того, зачем? У вас на столько мало памяти, что надо контролировать приложение?

На серваке надо запустить столько копий, сколько хватает оперативы. Писал на C# так как не было другого выхода. Делфя или сишка не предоставляла таких возможностей, чтобы написать мое ПО, вернее очень-очень геморно было бы. В ПО интегрирован мозилловский движок, а на  c# был хороший компонентик.
PM MAIL WWW ICQ Skype   Вверх
jonie
Дата 13.8.2010, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата(Voyager @ 13.8.2010,  17:02)
Код

        [System.Runtime.InteropServices.DllImport("psapi.dll")]
        static extern int EmptyWorkingSet(IntPtr hwProc);

        static void ClearMemory()
        {
            try
            {
                EmptyWorkingSet(System.Diagnostics.Process.GetCurrentProcess().Handle);
            }
            catch
            {
            }
        }

зря вы кстати на это не обратили внимание... это просто сбросил ворксет в пейджфайл.. и в эксплороре будет выглядеть как будто памяти мало..  )) 
в общем "меньше" чем можно оно не сможет стать имхо.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
_prishelec_
Дата 13.8.2010, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(jonie @ 13.8.2010,  22:57)
Цитата(Voyager @ 13.8.2010,  17:02)
Код

        [System.Runtime.InteropServices.DllImport("psapi.dll")]
        static extern int EmptyWorkingSet(IntPtr hwProc);

        static void ClearMemory()
        {
            try
            {
                EmptyWorkingSet(System.Diagnostics.Process.GetCurrentProcess().Handle);
            }
            catch
            {
            }
        }

зря вы кстати на это не обратили внимание... это просто сбросил ворксет в пейджфайл.. и в эксплороре будет выглядеть как будто памяти мало..  )) 
в общем "меньше" чем можно оно не сможет стать имхо.

Большое вам спасибо. Кста память идет в swap или же нет, если в среднем прога хавает под 50 метров оперативы (это со временем, минут так через 10, если не сбросить), на серваке гига 2, я думаю при вашем методе выгрузки памяти, я копий ну 40 спокой ну запущу, при ежесекундной очистке проаг весит от 2-10 метров

Добавлено @ 23:13
Цитата(jonie @ 13.8.2010,  22:57)
Цитата(Voyager @ 13.8.2010,  17:02)
Код

        [System.Runtime.InteropServices.DllImport("psapi.dll")]
        static extern int EmptyWorkingSet(IntPtr hwProc);

        static void ClearMemory()
        {
            try
            {
                EmptyWorkingSet(System.Diagnostics.Process.GetCurrentProcess().Handle);
            }
            catch
            {
            }
        }

зря вы кстати на это не обратили внимание... это просто сбросил ворксет в пейджфайл.. и в эксплороре будет выглядеть как будто памяти мало..  )) 
в общем "меньше" чем можно оно не сможет стать имхо.

Я этот метод как раз сейчас и заюзал и остался доволен.
Всем спасибо. Репу немогу поднять никому, мало у меня еще постов smile.

Это сообщение отредактировал(а) _prishelec_ - 13.8.2010, 23:15
PM MAIL WWW ICQ Skype   Вверх
VirusUZ
Дата 14.8.2010, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

Dispose(false);
Initsialisation();

--------------------
Virus
PM MAIL   Вверх
gambit
Дата 14.8.2010, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Цитата(_prishelec_ @  13.8.2010,  22:31 Найти цитируемый пост)
На серваке надо запустить столько копий, сколько хватает оперативы. 

У меня челюсть отвисла. Почитайте про домены.
PM MAIL ICQ Skype   Вверх
_prishelec_
Дата 15.8.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(gambit @ 14.8.2010,  11:58)
Цитата(_prishelec_ @  13.8.2010,  22:31 Найти цитируемый пост)
На серваке надо запустить столько копий, сколько хватает оперативы. 

У меня челюсть отвисла. Почитайте про домены.

Это вы что имели ввиду?
PM MAIL WWW ICQ Skype   Вверх
gambit
Дата 15.8.2010, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Что для подобных работ используются потоки. Но во многих случаях, этого мало (например если требуется разделение памяти), возможно и в вашем случае тоже, тогда используют домены приложения.
А запускать на каждую копию отдельный процесс - не кавайно!!!
Подробнее про домены здесь.

Добавлено через 9 минут
Даже лучше вот отсюда начать http://msdn.microsoft.com/ru-ru/library/2bh4z9hs.aspx

кроме того, у меня в мозгу как то не очень умещаются фразы:

Цитата(_prishelec_ @  13.8.2010,  15:43 Найти цитируемый пост)
и при его сворачивании (минимизирование окна)

Цитата(_prishelec_ @  13.8.2010,  22:31 Найти цитируемый пост)
На серваке надо запустить столько копий, сколько хватает оперативы.


Цитата(_prishelec_ @  13.8.2010,  23:05 Найти цитируемый пост)
я копий ну 40 спокой ну запущу

как вы их сворачивать то будите??? тем более 
Цитата(_prishelec_ @  13.8.2010,  23:05 Найти цитируемый пост)
при ежесекундной очистке


И самое главное, сервер это все таки стойка, а не ящик под ногами, а нормальная стойка попахивает уже не 40 копиями, а чуть побольше.
PM MAIL ICQ Skype   Вверх
_prishelec_
Дата 15.8.2010, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ведется разработка проекта для взятия данных из биллинговых систем. У них используются высокотехнологичные фильтры, дабы отследить ботов. С потоками ен получиться, так как мозилловский движок висит в одном адресном пространстве и ипа удаление Куков и тд происходит для всех потоков, также если делать маскировку, типа менять заголовки запроса, тоже лажа – меняешь в одном потоке и меняются в остальных. Мной было перепробовано много вариантов.
В свое время система работала полностью на PHP (просто система из несколько отдельных частей), использовал мной написанный класс для CURL. Кста могу поделиться: cURL. Но нужна обработка DOM и т.д. В общем премудростей много, конечная цель: полная эмуляция браузера.

Уже все решено и проект на завершающей стадии:
Сворачивать уже ничего ненадо:
Помог код:

Код

[System.Runtime.InteropServices.DllImport("psapi.dll")]
        static extern int EmptyWorkingSet(IntPtr hwProc);

        static void ClearMemory()
        {
            try
            {
                EmptyWorkingSet(System.Diagnostics.Process.GetCurrentProcess().Handle);
            }
            catch
            {
            }
        }


Кста я погуглил и по статистике множество решений юзают: EmptyWorkingSet.

Однажды каким-то макаром мне посоветовали вот это:.

Только коллеги сильно не увлекайтесь, а то мозг напрягает до ужаса. Какая-то дребидень.

Это сообщение отредактировал(а) _prishelec_ - 15.8.2010, 01:10
PM MAIL WWW ICQ Skype   Вверх
gambit
Дата 15.8.2010, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Цитата(_prishelec_ @  15.8.2010,  01:03 Найти цитируемый пост)
 и тд происходит для всех потоков, также если делать маскировку, типа менять заголовки запроса, тоже лажа – меняешь в одном потоке и меняются в остальных. 


Цитата(gambit @  15.8.2010,  00:28 Найти цитируемый пост)
 Но во многих случаях, этого мало (например если требуется разделение памяти), возможно и в вашем случае тоже, тогда используют домены приложения.


PM MAIL ICQ Skype   Вверх
_prishelec_
Дата 15.8.2010, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(gambit @ 15.8.2010,  01:30)
Цитата(_prishelec_ @  15.8.2010,  01:03 Найти цитируемый пост)
 и тд происходит для всех потоков, также если делать маскировку, типа менять заголовки запроса, тоже лажа – меняешь в одном потоке и меняются в остальных. 


Цитата(gambit @  15.8.2010,  00:28 Найти цитируемый пост)
 Но во многих случаях, этого мало (например если требуется разделение памяти), возможно и в вашем случае тоже, тогда используют домены приложения.

Да я с доменами не был знаком до вашего поста. Сейчас курю инфу. Пока спасибо за инфу. А дальше видно будет smile Мот с меня еще на пиво получиться в знак благодарности.. У 
Мне самомоу инетресно что получиться. То есть я смогу запускуть несколько копий прог под 1 домен и тд.?
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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