我在使用Visual Studio 2010开发的Windows Forms应用程序中遇到了一个奇怪的内存错误。我正在使用C#和.NET 4.0,但我不认为这些是问题的因素。要重现此问题,请创建一个新的Windows Forms应用程序并添加一个按钮。然后粘贴以下代码:
public Form1()
{
InitializeComponent();
AllowDrop = true;
DragEnter += new DragEventHandler(Form1_DragEnter);
button1.Click += new EventHandler(button1_Click);
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Link;
}
private void button1_Click(object sender, EventArgs e)
{
for(int i = 1; i <= 100000; i++)
{
DataGridView dgv = new DataGridView(); // or any other large object
if(i % 100 == 0)
Console.WriteLine("{0}: {1} MB memory in use", i, Environment.WorkingSet / 1024 / 1024);
}
}
运行程序,点击按钮,在输出窗口观察内存使用情况。随着垃圾回收多次进行,内存使用量会急剧上升然后下降。然后再运行一次,将任意文件或文件夹拖到表单上直到出现链接图标,然后再次点击按钮。这次内存使用量应该单调增加,就像垃圾回收没有被调用或所有生成的对象仍然有有效引用一样。
设置光标到链接拖放效果会如何影响内存使用情况呢???