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

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Большой размер потребляемой оперативной памяти приложением»

textual
Листинг программы
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());
        }
    }
}

Оцени полезность:

15   голосов , оценка 3.667 из 5
Похожие ответы