由于文件时间到winxs dll的版本5.82和6.10的comctl32.dll,我遇到缓慢的应用程序(.Net WinForm应用程序)
重复运行应用程序加载comctl32.dll,我尝试添加一个清单,使用vom的commom控件,即comctl32.dll v 6.无效。还试过pinvoke DLL试图强制使用。也无济于事。应用程序包含多个项目或模块。我做了一个简单的测试应用程序,动态地将500个textBox控件添加到flowlauoutpanel。它让我在comctl32.dll上进行Windows 10,6000+操作。在Windows 7上它的2个操作。如果我为.Net 3.5及更低版本构建,它在Windows 10上也只有2个操作。我可以强制应用程序加载comctl32.dll一次,甚至只加载几次而不是几千次? PS。我试过64位和32位。 filetime是200+的因素
代码(只是最小的winforms项目)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
AddTextBoxes(500);
}
private void AddTextBoxes(int number)
{
for (int i = 0; i < number; i++)
{
TextBox newBox = new TextBox();
newBox.Width = 30;
flowLayoutPanel1.Controls.Add(newBox);
}
}
}
Build for:net 2.0这是processmonitor中的结果:
Build for .Net 4.0这是processmonitor的结果:
.Net 3.5不是问题的一部分。只有.Net 4及以上。
在Win10上运行.Net 4.0时,我该怎么做才能减少这些文件事件?
问题似乎是Windows 10下本机函数GetModuleHandle的不同行为。此函数在.NET 4中的System.Windows.Forms.Control.CreateParams中调用,但在.NET 2中调用。 每次在Windows 10下调用GetModuleHandle(“comctl32.dll”)结果:
CreateFile C:\Windows\WinSxS\...\comctl32.dll
QueryBasicInformationFile C:\Windows\WinSxS\...\comctl32.dll
CloseFile C:\Windows\WinSxS\...\comctl32.dll
通过调用GetModuleHandle,Windows 7下没有文件操作。