Большой размер потребляемой оперативной памяти приложением - 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()); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д