Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/55: Рейтинг темы: голосов - 55, средняя оценка - 4.65
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018

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

16.02.2012, 06:35. Показов 10171. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, программа простая, простенькое винформ приложение с несколькими элементами, а оперативной памяти жрет 50 Мб. Я то на количество памяти не жалуюсь, но для простого приложения по моему очень много, учитывая, что в нем есть только около 15 глобальных переменных, из которых:
5 штук типа int
4 переменных типа string каждая не больше 50 символов
3 переменных типа DateTime
переменная CoockieContainer
Коллекция из приблизительно 200 элементов. Каждый элемент - это класс из 4 строк, одного bool, одного int и одного DateTime + один статический метод и один переопределенный метод ToString(). Это все.

Если сложить эти переменные все до кучи, памяти будет ну максимум на несколько мегабайт.
В чем же причина такого большого размера?

P.S. Если в конструкторе формы самой первой строкой указать Thread.Sleep(9999999) и посмотреть, сколько приложение занимает памяти до определения и объявления всех переменных и объектов, то оно не сильно отличается - 47-50 Мб. Откуда...
Наверное я еще слишком далек от того, что же в действительности происходит при выполнении скомпилированного приложения...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2012, 06:35
Ответы с готовыми решениями:

Размер списка в оперативной памяти
Есть список List<string> list. требуется определить размер памяти, который он занимает в байтах. строки разной длины, строк много(более...

Как програмно определить размер оперативной памяти
У меня такой вопрос: Как програмно определить размер оперативной памяти? В гугле ничё не нашёл решил здесь спросить.

Увеличение потребляемой оперативной памяти
Подскажите, пожалуйта, почему программа после каждого последующего исполнения процедуры использует на 20 мб оперативной памяти больше чем...

11
 Аватар для Sp1tfire
76 / 66 / 1
Регистрация: 10.12.2011
Сообщений: 175
16.02.2012, 12:16
сделай релиз-билд и удали ненужные ссылки на сборки
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.02.2012, 12:39
Вы небось в диспетчере задач потребление смотрите?
Там показывается рабочий сет, а не фактическое потребление. Смотрите private working set
1
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
16.02.2012, 17:17  [ТС]
Sp1tfire, я в релизе и смотрел. Ссылки сейчас поудалял, но это никак вроде не влияет) Ведь компилятор наверное сам выкидывает из кода неиспользуемые элементы при компиляции в Release.

Цитата Сообщение от kolorotur Посмотреть сообщение
Там показывается рабочий сет, а не фактическое потребление. Смотрите private working set
А где его можно посмотреть?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.02.2012, 18:07
Цитата Сообщение от Tolias28 Посмотреть сообщение
А где его можно посмотреть?
На ХР вроде как сторонним софтом типа Process Explorer.
На семерке в диспетчере View -> Select Columns -> Memory - Private Working Set.

Как вариант, можете свернуть ваше приложение в панель задач - тогда CLR уменьшит его рабочий сет до размеров, приблизительно равных фактической потребляемой памяти.
1
 Аватар для SharpDeveloper
141 / 138 / 22
Регистрация: 16.02.2012
Сообщений: 453
16.02.2012, 23:23
Для .NET это нормально, среда резервирует под себя то кол-во памяти, которое считает нужным. Размер этой памяти можно уменьшать принудительно, но делать это не советую.
1
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
17.02.2012, 00:52
50 все равно слишком много, но рассуждать тут не о чем - нет ни кода, ни скриншота и даже ни намека на суть программы
0
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
17.02.2012, 01:00  [ТС]
Цитата Сообщение от m0nax Посмотреть сообщение
50 все равно слишком много
сегодня уже 25 Наверное это действительно:
Цитата Сообщение от SharpDeveloper Посмотреть сообщение
среда резервирует под себя то кол-во памяти, которое считает нужным
эх шарп шарп... со своей производительностью и потребляемостью ресурсов...

Добавлено через 5 минут
На счет кода - просто там его очень много, и он разбит по файлам... Да и не в конкретном коде дело. Я вот для эксперимента попробовал другой проект с кодом, предоставленным ниже, и это приложение жрет сейчас 27 Мб.

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace TrayIconText
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Color color = Color.White;
            Icon icon = new Icon(@"icon_blank.ico");
            this.notifyIcon.Icon = GetIcon(this.textBox1.Text, icon);
        }
 
        public Icon GetIcon(string text, Icon backgroundIcon)
        {
            Bitmap bitmap = new Bitmap(16, 16);
            System.Drawing.Font drawFont;
            System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White);
            System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);
            graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
            graphics.DrawIcon(backgroundIcon, 0, 0);
            switch (text.Length)
            {
                case 1:
                    drawFont = new System.Drawing.Font("Verdana", 8);
                    graphics.DrawString(text, drawFont, drawBrush, 3, 1);
                    break;
                case 2:
                    drawFont = new System.Drawing.Font("Verdana", 8);
                    graphics.DrawString(text, drawFont, drawBrush, 0, 1);
                    break;
 
                default:
                    drawFont = new System.Drawing.Font("Verdana", 5);
                    graphics.DrawString(text, drawFont, drawBrush, 0, 4);
                    break;
            }
            return Icon.FromHandle(bitmap.GetHicon());
        }
    }
}
Ну что в этом коде такого, чтобы жрать 27 Мб?
0
 Аватар для Sp1tfire
76 / 66 / 1
Регистрация: 10.12.2011
Сообщений: 175
17.02.2012, 01:04
Цитата Сообщение от Tolias28 Посмотреть сообщение
Коллекция из приблизительно 200 элементов. Каждый элемент - это класс из 4 строк, одного bool, одного int и одного DateTime + один статический метод и один переопределенный метод ToString(). Это все.
переделайте клас в структуру
0
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
17.02.2012, 01:09  [ТС]
Цитата Сообщение от Sp1tfire Посмотреть сообщение
переделайте клас в структуру
В начале разработки приложения я со структуры и начинал. Но тогда у меня возникли проблемы с сериализацией и десериализацией этого типа (сейчас уже точно не помню, что там было не так). А когда переделал структуру на класс, с сериализацией проблемы исчезли.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
17.02.2012, 10:29
Tolias28, это .Net, он всегда жрет память, смирись. Потребление 30 МБ в твоем приложении вовсе не значит, что при увеличении кода в 2 раза прога будет брать 60 МБ ОЗУ.
Я сейчас работаю над прогой, в которой уже 10тыс строк кода и ~600 классов, при этом она потребляет 85 МБ (при загруженных из БД данных), что абсолютно некритично при 2 ГБ ОЗУ. Так что забей на тупые подсчеты и займись чем-нить более полезным.

Добавлено через 2 минуты
Ну а коль хош сэкономить ОЗУ, ASM тебе в помощь.
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.02.2012, 10:37
Цитата Сообщение от nio Посмотреть сообщение
Ну а коль хош сэкономить ОЗУ, ASM тебе в помощь.
Зачем? Есть же много других языков, не раздувающих прилады. Из распростарнённых Object Pascal, c++, c.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2012, 10:37
Помогаю со студенческими работами здесь

Как уменьшить объём потребляемой оперативной памяти?
Используется C# MySql При добавлении в таблицу MySql новых записей растёт потребление оперативной памяти. Код ...

Как уменьшить объём потребляемой оперативной памяти программой?
Добавляю запись в таблицу MySql кодом private void insertData() { string conStr = "server=127.0.0.1;user=root;" + ...

Как уменьшить размер потребляемой памяти?
Доброго времени суток)не подскажите как уменьшить размер потребляемой памяти приложением? К примеру моя программа вести почти 2...

C++ Builder 6 увеличивается размер потребляемой памяти
Необходимо чтобы в 3 разный Label'ах отображались текущие часы, минуты, секунды. В таймере Label1 -> Caption =...

Как бороться с увеличением объема потребляемой оперативной памяти при сохранении файла Excel без закрытия?
Привет Всем! Вопрос такой, в программе написанной на VBA Ecxel я заметил такую штуку, при каждом сохранении без закрытия файла в ДиспЗадач...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru