wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了winforms – 拖放如何影响Windows窗体应用程序中的内存使用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我在使用Visual Studio 2010开发的 Windows窗体应用程序时遇到了一个奇怪的内存错误.我使用的是C#和.NET 4.0,但我不认为这是一个因素.要重现,请启动新的Windows窗体应用程序并添加一个按钮.然后粘贴以下代码: public Form1() { InitializeComponent(); AllowDrop = true; DragEnte
我在使用Visual Studio 2010开发的 Windows窗体应用程序时遇到了一个奇怪的内存错误.我使用的是C#和.NET 4.0,但我不认为这是一个因素.要重现,请启动新的Windows窗体应用程序并添加一个按钮.然后粘贴以下代码

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);
    }
}

运行程序,单击按钮,然后在输出窗口中查看内存使用情况.随着垃圾收集在多个周期中发生,它会飙升然后再下降.然后再次运行它,将任何随机文件文件夹拖到窗体上,直到您获得链接图标,然后再次单击该按钮.这次内存使用量应该单调增加,就像没有调用垃圾收集一样,或者仍然存在对生成的所有对象的有效引用.

如何将光标设置为链接拖放效果会影响内存使用情况,如此???

解决方法

这是一个已知的WinForms泄漏.
当AllowDrop属性设置为True时发生.
如果将其设置为False,CLR将清除内存.
避免它的最佳方法是不要将表单用作目标drop容器.

您可以使用类似于容器的小面板来切换AllowDrop属性.

这也有效:
在drop,重置AllowDrop,并强制垃圾回收.

void Form2_DragDrop(object sender,DragEventArgs e)
    {
        AllowDrop = false;
        GC.Collect();
        GC.Collect();
        AllowDrop = true;
    }

大佬总结

以上是大佬教程为你收集整理的winforms – 拖放如何影响Windows窗体应用程序中的内存使用?全部内容,希望文章能够帮你解决winforms – 拖放如何影响Windows窗体应用程序中的内存使用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: