2009-09-22 98 views
4

我面臨以下問題,在這一點上,我覺得我嚴重缺乏某種工具,我只是不知道該工具是什麼,或者它應該是什麼這樣做。追蹤緩慢的管理DLL負載

這裏是設置: 我有一個第三方DLL必須在GAC中註冊。這一切在我們以前部署軟件的每臺機器上都可以正常工作。但是現在我們有了兩臺機器,看起來和我們所知道的相同(它們是從相同的圖像中克隆出來的,並且塞滿了相同的硬件,所以幾乎唯一的區別是軟件設置,我一遍又一遍地重複着它們)看起來不錯)。

現在的問題是,GAC中的DLL需要很長時間才能加載。至少我相信這是問題,我可以明確地說從DLL中實例化單個類是緩慢的部分。一旦它被加載,東西就會像以往一樣飛翔。但是,在已知良好的機器上,DLL加載速度如此之快以至於日誌中的時間戳甚至不會改變,在這兩臺機器上,需要花費加載1分鐘以上的

瞭解: 我無法訪問源代碼,所以無法通過DLL進行調試。我們的應用程序是唯一使用它的應用程序(所以不應該是同時訪問問題)。這個DLL只有一個版本存在,所以它不應該是版本衝突的問題。正在使用GAC參考(如果我從GAC卸載DLL,將會拋出關於缺少GAC參考的異常)。

能否在debug-fu中有更高技能的人建議我能做些什麼來追蹤這個問題的根本原因?

+0

呃,聽起來像一個可怕的問題。期待一個答案。你確認machine.config文件是否相同? .DLL是否進行網絡通話? – womp 2009-09-22 22:43:23

+0

@Alex K:這到底是什麼?我有一個非常類似的問題。你記得你的解決方案嗎? – 2012-02-20 19:57:31

+0

@ ralf.w。對不起,在調查過程中沒有很好的見解。由於時間限制,我們剛剛更換了機器。我的#1嫌疑人是反病毒,但我無法跟進。您可以嘗試禁用它(如果您的IT策略允許)並查看它是否有幫助。 – 2012-02-22 15:05:38

回答

2

下載2個小實用程序稱爲:'filemon.exe'和'regmon.exe',它們向你展示了關於分別打開文件&註冊表時發生了什麼。無論何時我無法確定程序是否掛起或正在加載,這些工具都能讓我深入瞭解他們正在做什麼,或者他們在等待什麼。

1

我認爲你最好的選擇是調試到應用程序。調試應用程序並不是嚴格需要源代碼,它只是讓它變得簡單得多。下面是我會用

  1. 禁用僅我的代碼的策略(工具 - >選項 - >調試器 - >一般)
  2. 啓動調試
  3. 等待掛起
  4. 命中下的程序打破。
  5. 打開調用堆棧

此時,你應該能夠看到該程序是在當前打破。基本上是方法的名稱。這會給你一些指示,說明在加載過程中哪些操作花費了這麼多時間(即使你沒有源代碼)。

如果方法不熟悉,請在此處回傳數據,希望有人能夠幫助您解決問題。

+0

感謝您的建議,但我已經這樣做了,而且它在我的代碼中凍結(我從那個DLL實例化一個類)。這是什麼讓我相信它是加載到內存中的DLL導致減速。我想我正在尋找的是一個工具,我可以在GAC中引用一個參考,它會告訴我訪問它的是什麼(我開始懷疑病毒掃描程序可能會鎖定它進行檢查,因爲我剛剛發現2臺機器不使用相同的版本,因爲它們將被運送到不同的客戶) – 2009-09-23 12:55:38