c# - 如何使我的应用程序与 Windows 资源管理器一样快地呈现文件

标签 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;
            }
        }

如您所见,代码中没有任何异常之处。我在窗体上有一个面板,我已将面板上的自动滚动设置为 true,将自动大小设置为 false。这会导致表单保持大小,按钮(其中一些按钮)从表单中呈现出来,我可以向下滚动到它们。

到目前为止一切都很好。

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

我已阅读以下问题 Super slow C# custom control而且我知道我使用的方法可能不是这里使用的最佳方法。

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

谢谢

最佳答案

很长的控件列表通常是通过虚拟化控件实现的。这意味着如果屏幕上只能容纳 20 个按钮,它只会创建 20 个左右的按钮。当您四处滚动时,它会重复使用相同的 20 个按钮,其中包含新数据。

创建和管理大量控件可能会非常慢,因为它们通常被添加到一个简单的列表或层次结构中(并且单独地非常复杂)。

最好自己管理一组较小的按钮来显示很长的数据列表。显然需要更多工作,但与“简单方法”相比,最终结果快如闪电。

如果不想自己DIY,可以试试第三方控件。例如,Telerik 虚拟化的 TreeListGrid 控件可以显示一百万条记录而没有减速。 Take a look at their Winforms grid here

关于c# - 如何使我的应用程序与 Windows 资源管理器一样快地呈现文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3576661/

相关文章:

c# - 如何正确使用 TestContext.Properties

PHP 内置服务器给出 "CLI has stopped working"

windows - 如何重新编译 Chocolatey 虚拟包?

c# - 如何提高窗口电话 8.1 中的性能方法 GetThumbnailAsync

javascript - Facebook 实时聊天背后的概念(数据传输)是什么?

c# - Action 需要 Swagger 的独特方法/路径组合

c# - 将数据从 Azure Excel blob 文件导入到 SQL Server

c# - 调用对象方法而不考虑参数类型

windows - 替换 Windows 中整个子文件夹中文件名中的所有 #

python - Pandas 扩展/滚动窗口相关性计算与 p 值