我的Windows窗体应用程序中有一个奇怪的问题。 有时,DLL的加载时间很长(令人沮丧的是,这是随机发生的,有时没有问题) 还有一件事: 这只发生在Windows 7中(从不在Windows XP中)。预加载非托管dll
dll的加载发生在第一次使用时。
有没有人有一些建议我可以做的。
是否有可能预加载DLL或给予更高的优先级等? 拥有(装货前,也许一些新的安全检查)7在Windows中更改加载DLL
一些规格:
- 使用.NET 4.0
- DLL不在托管代码(我放在DLL中其中可执行文件的文件夹)
EDIT - 一些更多信息如下:
我使用Bass.dll(http://www.un4seen.com/)并通过.NET API调用它。 该系统运行良好。现在一些用户已经切换到Windows 7,并且这个问题已经开始随机发生。
我将代码展开到一个较小的项目中(以便能够找到问题)。 在我的一台电脑上,我能够看到延迟发生(有时几秒钟,有时最多30秒)。 我也问过这个问题在论坛上的这个组件:
http://www.un4seen.com/forum/?topic=12378.0
他们提到以下几点:
“我可能想到的唯一的事情可能是加载时间组件( dlls) - 因为它们在需要时被加载(即第一次方法调用到尚未加载的程序集中)。“
一些下面的代码:
public Form1() {
InitializeComponent();
Un4seen.Bass.BassNet.Registration("[email protected]", "XXX");
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER, 5000);
}
private void button1_Click(object sender, EventArgs e) {
DialogResult result = openFileDialog1.ShowDialog();
if(result == System.Windows.Forms.DialogResult.OK){
label1.Text = DateTime.Now.ToString();
int stream = Bass.BASS_StreamCreateFile(openFileDialog1.FileName, 0L, 0L, BASSFlag.BASS_DEFAULT);
bool success = Bass.BASS_ChannelPlay(stream, false); // delay occurs here
label2.Text = DateTime.Now.ToString();
}
}
新的编辑
我用进程监视器(感谢@Ziplin)来检查的操作。这里是延迟:
19:31:11,4886069 TestSound.exe 5048 RegQueryValue HKCU \软件\微软\多媒体\音频\ UserDuckingPreference找不到名称长度:144
19:31:11,4886281 TestSound。EXE 5048 RegCloseKey HKCU \软件\微软\多媒体\音频SUCCESS
19:31:49,0892107 TestSound.exe 5048线程退出SUCCESS线程ID:5108,用户时间:0.0000000,内核时间:0.0000000
19:31:54,1185784 TestSound.exe 5048 RegQueryKey HKCU \ Software \ Classes SUCCESS查询:名称
您应该试着弄清楚为什么需要这么长时间才能加载 – 2011-04-03 12:10:39
随机发生的问题很难诊断。但是,当我们既没有提供源代码,也没有解释DLL *中的代码*时,诊断问题甚至更难。不要通过预加载DLL来绕过它;解决实际问题。没有其他Windows 7打破有效代码的报告。 – 2011-04-03 13:25:20
谢谢,我会编辑更多信息的帖子。 – PKK 2011-04-03 16:55:01