如何使我的应用程序像Windows资源管理器一样快速地渲染文件

Aid*_*anO 5 c# windows optimization explorer

我有一个包含大量文件的文件夹.我希望能够将每个文件渲染为一个按钮.当我点击按钮时会发生一些事情.

 private void Form1_Load(object sender, EventArgs e)
    {
        int x = 10; 
        int y = 10;

        /// Process the list of files found in the directory.
        string[] fileEntries = Directory.GetFiles(@"c:\lotsofDocs");
        foreach (string fileName in fileEntries)
        {
            // do something with fileName
            Button newbotton = new Button();
            newbotton.AutoSize = true;
            newbotton.Text = fileName;
            panel1.Controls.Add(newbotton);
            newbotton.Location = new Point(x, y);
            x += 150;
            if (x == 760)
            {
                y += 50;
                x = 10;
            }
        }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,代码中没有任何疯狂.我在表单上有一个面板,我在面板上设置自动滚动为true,自动大小为false.这会导致表单保持大小和按钮(其中一些仍然是)从表单渲染,我可以向下滚动到它们.

到目前为止都很好.

如果我有100或200个文件,一切正常,如果我有1932个文件,那么渲染所有按钮大约需要10秒钟.

我已经阅读了以下问题超慢C#自定义控件,我明白我使用的方法可能不是最好在这里使用.

现在问题是:Windows资源管理器如何处理这个问题?如果我在Windows资源管理器中打开此文件夹,它会立即打开.Windows资源管理器使用什么类型的控件?或者它是以完全不同的方式对我做的.

谢谢

Gon*_*ing 5

很长的控件列表通常通过虚拟控件实现.这意味着如果屏幕上只有20个按钮,那么它只会创建20个按钮.滚动时,它会重复使用相同的20个按钮,其中包含新数据.

控件可以创建和他们通常添加到一个简单的列表或层次(并且是相当复杂单独)大量管理非常缓慢.

最好自己管理一小组按钮,以显示很长的数据列表.显然有更多的工作,但与" 简单方式 " 相比,最终结果是闪电般快速.

如果您不想DIY,请尝试第三方控件.例如,Telerik虚拟化,列表网格控件可以显示一百万条没有减速的记录.在这里看看他们的Winforms网格