【发布时间】:2011-04-04 08:22:59
【问题描述】:
我有一个文件夹,里面有大量文件。我希望能够将我的每个文件呈现为一个按钮。当我点击按钮时,会发生一些事情。
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 资源管理器使用什么类型的控件?还是它以与我完全不同的方式做到这一点。
谢谢
【问题讨论】:
-
为什么不“像 Chrome 一样快”? youtube.com/watch?v=4viKjxJqId0
-
我怀疑 Windows Explorer 是否在使用 .NET。它对系统的影响更深,并且多年来经过多次迭代进行了优化。
-
@Hamish Grubijan... Windows“桌面”资源管理器,而不是 Windows“Internet”资源管理器! (顺便说一下可怕的照片)。
-
谢谢,你自己长得不好看。
-
他们在哪里测试 Chrome“前进”按钮的速度?是的,现在这是我最关心的浏览问题。
标签: c# windows optimization explorer