我的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