Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
1

Уменьшение объема занимаемой оперативной памяти приложения

04.09.2012, 00:01. Показов 6586. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья,недавно столкнулся с проблемой нехватки оперативной памяти приложению(огромному) одна вкладка которого весила почти 40мб и их могло быть и 10 и 20....короче жесть,а потом на просторах интернета наткнулся на эту замечательную функцию и счастью моему нет предела!!!
Вот приведу простой пример применения этой функции:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Memory
{
    class Program
    {
       [ DllImport( "kernel32.dll" ) ]
        public static extern bool SetProcessWorkingSetSize( IntPtr handle,
                                                            int minimumWorkingSetSize,
                                                            int maximumWorkingSetSize );
        [STAThread]
        static void Main(string[] args)
        {
          Console.WriteLine( "До" );
          Console.ReadLine();
          SetProcessWorkingSetSize( System.Diagnostics.Process.GetCurrentProcess().Handle,-1, -1 );
          Console.WriteLine( "После" );
          Console.ReadLine();
         }
     }
}
Ну а результаты говорят сами за себя:

P.S. Конечно многим я Америку не открыл,но подумал пригодится таким как я))
Миниатюры
Уменьшение объема занимаемой оперативной памяти приложения   Уменьшение объема занимаемой оперативной памяти приложения  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2012, 00:01
Ответы с готовыми решениями:

Уменьшение объёма памяти, занимаемой приложением
вот у меня написано "обнуление" for(i%200==0) { Application.DoEvents(); } почему у меня в...

Сколько можно создать потоков исходя из количества процессоров и объема оперативной памяти?
Как понять, сколько можно создать потоков исходя из количества процессоров и объема оперативной...

Ограничить количество занимаемой оперативной памяти при выполнении функции
Функция производит запись в файл (.txt) рассчитываемых значения. Обьем расчетов достаточно большой...

Определение объема памяти занимаемой переменной
как определить сколько памяти занимает переменная?

23
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.09.2012, 00:44 2
Меня это тоже интересует.
Я читал что это очень негативно влияет на работу clr,потому как постоянно заставляет запрашивать ресурсы при изменении стека или кучи. Рассудите а?

Да вспомнил еще что 4мб это только выделяемая память,а рабочая будет как раз возле ваших 640кб
0
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
04.09.2012, 00:50 3
Да хватит Вам уже кастрировать свои же приложения, сколько можно то, а потом появляются претензии что приложение тормозит. SetProcessWorkingSetSize не уменьшает размер занимаемой приложением памяти, функция изменяет рабочий набор процесса. Сбрасывая его вы только топите своё же приложение, если системе нужна будет память, она её заберет сама.

Название: 1.png
Просмотров: 882

Размер: 5.7 Кб Название: 2.png
Просмотров: 890

Размер: 4.5 Кб

И после вызова функции приложение будет опять резервировать память, до определенного момента. Это получается нагружение менеджера памяти бессмысленными операциями.
1
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.09.2012, 00:52 4
вот нашел
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
04.09.2012, 00:52  [ТС] 5
А тогда мне что делать?прога не моя большая корпоративная,как ее запустят пользователи с ноутбуком в 1-2 гига памятью?учитывая что на них 7ка а это 30~40процентов операционнка
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.09.2012, 00:59 6
а как насчет этих функций,они также режут или ими можно подпилить незаметно прогу?
C#
1
System.Diagnostics.Process.GetCurrentProcess.MinWorkingSet     System.Diagnostics.Process.GetCurrentProcess.MaxWorkingSet
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
04.09.2012, 01:02  [ТС] 7
А нет альтернативных вариантов?Без всяких урезаний
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.09.2012, 01:04 8
Цитата Сообщение от REALIST07 Посмотреть сообщение
А нет альтернативных вариантов?Без всяких урезаний
Я думаю только рефакторинг и анализ кода разными профайлерами.
Но я подожду пока умные люди помогут)
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
04.09.2012, 01:06  [ТС] 9
Я кстати слышал про это,например какой программой делать?
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
04.09.2012, 01:06 10
вариант "почистить говнокод" не популярен совсем смотрю )
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.09.2012, 01:06 11
Метод который использовали ведь начинает жрать жесткий диск,а не RAM,по-этому падает скорость?
0
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
04.09.2012, 01:07 12
Цитата Сообщение от Noob.net Посмотреть сообщение
а как насчет этих функций,они также режут или ими можно подпилить незаметно прогу?
Внутри происходит тот же вызов SetProcessWorkingSetSize, подробнее в рефлекторе.
Цитата Сообщение от REALIST07 Посмотреть сообщение
А нет альтернативных вариантов?
Сложно говорить об оптимизации приложения не видя его и его код... Я не к тому что его следует выкладывать что бы кто-то в нём копался, а к тому что стоит поискать его уязвимые моменты самому, используя специально предназначенные для этого средства - профайлеры. И вариант
Цитата Сообщение от m0nax Посмотреть сообщение
"почистить говнокод"
думаю тоже имеет место быть.
Цитата Сообщение от Noob.net Посмотреть сообщение
Метод который использовали ведь начинает жрать жесткий диск,а не RAM,по-этому падает скорость?
Содержимое страниц памяти может быть сброшено в файл подкачки, если они используются приложением, скорость доступа к этим участкам соответственно упадёт.
1
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
04.09.2012, 01:10  [ТС] 13
Цитата Сообщение от SSTREGG Посмотреть сообщение
Я не к тому что его следует выкладывать что бы кто-то в нём копался, а к тому что стоит поискать его уязвимые моменты самому, используя специально предназначенные для этого средства - профайлеры.
Конкретнее,например какой?

Добавлено через 58 секунд
Цитата Сообщение от m0nax Посмотреть сообщение
вариант "почистить говнокод" не популярен совсем смотрю )
там около 50 файлов в ядре и 20 сама прога и все не менее 5-6килострок,ты уверен про почистить?
0
Почетный модератор
Эксперт .NET
8721 / 3673 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
04.09.2012, 01:12 14
Цитата Сообщение от REALIST07 Посмотреть сообщение
Конкретнее,например какой?
http://stackoverflow.com/quest... -profilers
На вкус и цвет все фломастеры разные...
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
04.09.2012, 01:13  [ТС] 15
А вообще из теории оптимизации(если есть такая) где можно прочитать про хороший качественный код?
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.09.2012, 01:16 16
Цитата Сообщение от REALIST07 Посмотреть сообщение
там около 50 файлов в ядре и 20 сама прога и все не менее 5-6килострок,ты уверен про почистить?
в самой VS просмотри какая ф-я жрем много,а потом по-немного,по-немного..
(Анализ\Мастер производительности)
1
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
04.09.2012, 01:20 17
Цитата Сообщение от REALIST07 Посмотреть сообщение
там около 50 файлов в ядре и 20 сама прога и все не менее 5-6килострок,ты уверен про почистить?
не ну а как иначе? сам то подумай...
если прога жрет явно больше чем ей положено значит надо править код
какая разница сколько там килострок? это единственное решение которое реально поможет, выбора то нету
т.е либо правишь код и уменьшаешь потребление памяти, либо не правишь и не уменьшаешь потребление
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.09.2012, 01:21 18
Вот еще инфу нашел)
Жрет из-за совместимости процессоров.Если ставить свой,например если у тебя х86 будет по-меньше.
Но ведь ты пишешь не только для себя,правильно.

//если инфа 100%
Еще,если юзать 64бита то там 2 копию система будет резать больше нежели 32-ох.


И чем больше у системы отбирают памяти тем больше она прессует приложения на .net)

Я за 2 недели правил код когда-то) когда все готовое - алгоритм прорисовываешь,а потом дело времени
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
04.09.2012, 01:32 19
а фукнция очень даже полезная, только в роли косметики, а не решения всех проблем
мы то знаем что система сама память заберет когда понадобится, а вот юзер скорей всего дуб дубом, он видит цифру и бежит кричать про аналог который жрет вдвое меньше памяти...
вот тут и можно навести иллюзию, в итоге наша совесть почти чиста и юзер спит спокойно )
конечно осторожно применять надо, например при сворачивании в трей
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
04.09.2012, 01:41  [ТС] 20
Справедливости ради хочу заметить что прога не на C# Forms,а на WPF,у меня возникает мысля пустить в отдельном потоке вызов этой функции для основного потока.Вообще бред делится на 2части-выполнимый и невыполнимый,к какому относится эта мысль?
0
04.09.2012, 01:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2012, 01:41
Помогаю со студенческими работами здесь

Накапливается объем занимаемой оперативной памяти
Писали ПО с адекватным интерфейсом для терминала, в ходе работы выяснилось что с каждым переходом...

Подсчитать количество оперативной памяти, занимаемой программой
Подскажите, пожалуйста!!!!! Существует ли программный код подсчёта оперативной памяти занимаемой...

Постепенное увеличение занимаемой оперативной памяти и сбой программы
Программа содержит 4 формы, которые создаются при первом запуске приложения, и работает с...

Уменьшение используемого объёма памяти при работе с изображениями
Здравствуйте, вот сейчас я пытаюсь сделать простенькую игру. И вот я столкнулся со след. проблемой...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru