Большой размер потребляемой оперативной памяти приложением - 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());
}
}
}