Вопрос: Программа в оперативке. Не многовато-ли? | Добавлено: 17.05.06 20:00 |
Автор вопроса: ![]() |
Простенькая прога занимает в оперативке 11 метров. Для того, что я делаю это недопустительно. Что там в ней такое громоздкое вешается в оперативку и как это исправить? |
Ответы | Всего ответов: 18 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ICQ: 278444762 Вопросов: 71 Ответов: 179 |
Профиль | Цитата | #1 | Добавлено: 17.05.06 20:24 |
Выложи хотя бы кусок кода проги. Или хотя бы расскажы шо она делайт |
Номер ответа: 2 Автор ответа: ![]() ![]() ICQ: 190153075 Вопросов: 5 Ответов: 10 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 17.05.06 20:29 |
Да неважно что. Создаю прогу в которой 1 кнопка 1 действие- показывание messageBox'a то она занимает 10 в оперативке при запуске 10 метров. При то что сам ехе-шник не тянет даже на 100кб... Так как в дальнейшем то, что я делаю, предназначается для кпк, то 10 метров это слишком... |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ICQ: 261800349 Вопросов: 19 Ответов: 148 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 17.05.06 23:27 |
Private Declare Function SetProcessWorkingSetSize Lib "kernel32" Alias "SetProcessWorkingSetSize" (ByVal hProcess As Integer, ByVal dwMinimumWorkingSetSize As Integer, ByVal dwMaximumWorkingSetSize As Integer) As Integer Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) MyBase.WndProc(m) SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess.Handle.ToInt32, -1, -1) End Sub |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ICQ: 261800349 Вопросов: 19 Ответов: 148 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 17.05.06 23:37 |
Работает? |
Номер ответа: 5 Автор ответа: ![]() ![]() ICQ: 190153075 Вопросов: 5 Ответов: 10 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 18.05.06 00:58 |
Это максимально выделяемое ей... Проге то есть... У меня размер проге на старте надо уменьшить... Так как она в процессе работы конкретно увеличится. А просто ограничить её- это не выход =\... Тогда ей самой не хватит памяти. Хотелось бы всё таки знать, откуда там 10 метров при старте... |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 11 Ответов: 71 |
Профиль | Цитата | #6 | Добавлено: 18.05.06 09:28 |
Подгружаемые библиотеки вроде System.Windows.Forms и т.д.
референсов у твоей проги поди немало ... а для КПК - вроде как в VS 2005 есть программыные средства для написания для мобильных устройств. возможно те средства будут покомпактней в памяти |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 271202919 Вопросов: 56 Ответов: 837 |
Профиль | Цитата | #7 | Добавлено: 18.05.06 12:56 |
FrameworkCOmpact2003 кажись и называется. |
Номер ответа: 8 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 1066 |
Профиль | Цитата | #8 | Добавлено: 18.05.06 15:48 |
Вопросы об огромном размере занимаемой .net-программой памяти возникают практически через день.
Пора бы уже привыкнуть и смириться с этим. Коль скоро вы сами не хотите писать код своей программы и используете готовые решения в виде подключаемых классов, то зачем жаловаться на размеры этих классов, референсов и т.д. Пишите сами, без "средств" .net - и будут ваши программы маленькие, шустрые и нересурсоёмкие. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ICQ: 261800349 Вопросов: 19 Ответов: 148 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 18.05.06 17:20 |
Не хулигань!)
А на чем написан Касперский и Explorer Чего они занимают раз в 20 больше памяти чем прога на nete c использованием SetProcessWorkingSetSize. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 224 Ответов: 3777 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 18.05.06 17:28 |
Хз я прогу делал для кпк - пятнашки - на ВБ.НЕТ 2003 там и с рисунками и всё. да, количество доступных функций явно меньше, но и пямяти занимает мало. и идёт под обычным виндовсом (правда не смотрел скока занимает на обычном ПК) |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ICQ: 261800349 Вопросов: 19 Ответов: 148 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 18.05.06 17:31 |
Тестировал программу расчета статических характеристик идеального газа (курсач) на скорость.
vb6 значительно уступает vb.net delphi примерно одном уровне. "Сам" я может быть и написал на cpp. Но только до сдачи курсача ни как не успею. Вот и выбирай. |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 6 Ответов: 26 |
Профиль | Цитата | #12 | Добавлено: 21.05.06 14:06 |
SPArk не парься, на PDA будет занимать гораздо меньше. Моя текущая на PC хавает почти 12 метров, а на налодоннике 376 кб. |
Номер ответа: 13 Автор ответа: ![]() ![]() ICQ: 190153075 Вопросов: 5 Ответов: 10 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 22.05.06 02:54 |
Спасибо за ответы. Спасибо за помощь ![]() |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #14 | Добавлено: 06.08.06 05:43 |
Не так давно писал прогу-резидент. Так вот - она занимала больше 50Mb. То, что она фактически это место не занимала, а резервировала спокойствия не приносило. Начал копаться и в итоге у меня получился такой вот модуль, который я вызываю в проге при каждом удобном случае. В модуле два параметра - максимальное и минимальное значение рабочего пространства в памяти. Если честно - уменьшайте до тех пор, пока прога при вызове модуля не начнет падать ![]() Вызов модуля можно назначить по таймеру, при активации окна или меню и т.д. У меня с 50Mb уменьшается до 3...7Mb. 'Модуль освобождения резервируемой памяти Sub ClearMemory() On Error GoTo UpMemory Dim Min, Max As Integer Min = 100000 'Мин. размер Max = 500000 'Макс. размер System.Diagnostics.Process.GetCurrentProcess.MinWorkingSet = Min System.Diagnostics.Process.GetCurrentProcess.MaxWorkingSet = Max End Sub Вызов содуля: Call ClearMemory |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #15 | Добавлено: 06.08.06 05:47 |
Гы, плохо редактирования сообщений нет. Вот он код в чистом виде:
Sub ClearMemory() System.Diagnostics.Process.GetCurrentProcess.MinWorkingSet = 100000 System.Diagnostics.Process.GetCurrentProcess.MaxWorkingSet = 500000 End Sub |
|