今天无意中发现一个问题:如果我有一个按钮类,然后这样的按钮new了200+个,然后如果把单击事件扔在类里面,那么new出来200多个按钮的时候,那单击事件是不是也得复制,那么是不是比把所有按钮绑定在一个单击事件上浪费空间?
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 WinTempCS
{
public partial class Form1 : Form
{
private ButtonA[] MapA;
private ButtonB[] MapB;
private ButtonC[] MapC;
private const int max = 10000;
public Form1()
{
InitializeComponent();
}
class ButtonA:Button
{
public ButtonA()
{
this.Click += new EventHandler(this.ButtonA_Click);
}
public void ButtonA_Click(object sender, EventArgs e) { }
}
class ButtonB : Button
{
public ButtonB()
{
this.Click += new EventHandler(Form1.ButtonB_Click);
}
}
class ButtonC : Button
{
public ButtonC() { }
}
public static void ButtonB_Click(object sneder, EventArgs e) { }
private void button1_Click(object sender, EventArgs e)
{
MapA = new ButtonA[max];
for (int i = 0; i < max; i++)
MapA[i] = new ButtonA();
MessageBox.Show("1");
}
private void button2_Click(object sender, EventArgs e)
{
MapB = new ButtonB[max];
for (int i = 0; i < max; i++)
MapB[i] = new ButtonB();
MessageBox.Show("1");
}
private void button3_Click(object sender, EventArgs e)
{
MapC = new ButtonC[max];
for (int i = 0; i < max; i++)
{
MapC[i] = new ButtonC();
MapC[i].Click += new EventHandler(this.button2_Click);
}
MessageBox.Show("1");
}
}
}
第一种就是把单击事件函数复制了10000遍。
第二种在构造函数里面绑定事件,这个事件函数是单一的。
第三种是在实例化之后绑定事件,这个事件仍然单一。
然后开任务管理器看了一下,结果发现第三种内存增量最小,然后是第一种,然后是第二种。
由于单击事件函数体是空的,而且只是测试了两遍,所以数据上可能会有些偏颇,但是应该可以的出来绑定单一事件跟复制n遍在内存上影响不大~
图片就不上了,有兴趣的同学可以自己测试一下~