2009-10-24 38 views
11

本週,我遇到了一個奇怪的問題,我無法解釋:我將應用程序切換爲使用某些第三方程序集(Xceed Grid和其他某些組件)的簽名版本,並且應用程序啓動時間進入了廁所。每次應用程序加載一個簽名程序集時,加載需要30秒。應用程序開始從5秒到90秒以上。這裏發生了什麼?!爲什麼簽名的程序集加載緩慢?

其他一些信息:

  • 這是在.NET 3.5 SP1上運行的WinForms應用程序。
  • 電腦沒有互聯網連接(有意爲安全起見)。
+0

您是否更改運行時環境的任何設置?特別是在哪個信任級別執行應用程序?默認? – Foxfire 2009-10-24 17:47:42

+1

你是如何檢查加載時間的? – anishMarokey 2009-10-24 18:06:40

+0

在Internet Explorer中,轉到選項 - >高級。取消選中「檢查發佈商證書撤銷」框,這對我以前的類似情況有幫助... – ParmesanCodice 2009-10-24 18:19:29

回答

14

看一看這些鏈接:

他們可能會有所幫助。這可能是因爲你係統上的配置意味着.NET框架正在做大量額外的工作來驗證程序集。如果是這種情況,那麼你可以配置它不那麼挑剔。

+0

另外,如果他們有其他報告過相同問題的客戶,請聯繫該程序集的作者。他們可能在他們的網站上有一個FAW部分或其他東西。 – 2009-10-24 17:51:20

+0

謝謝,那正是問題所在!現在正在Xceed論壇上發佈帖子,所以沒有人會遭受同樣的痛苦。 – 2009-10-28 02:44:07

1

加載簽名程序肯定會比非簽約同行慢因爲簽名需要驗證,但是這應該是完全可以忽略不計。

從5秒過去90秒?我認爲你需要聯繫程序集作者,詢問他們是否只更改了簽名:-)

+0

90秒的原因是測試機未連接到互聯網,因此它超時。 (這可能聽起來像是瘋狂的談話,但有些情況下這是非常有效的。) – 2011-09-13 04:21:16

0

也許簽署的程序集不是NGEN'd,而未簽名的程序集是。

+1

不確定,但他正在談論90!秒。除非組裝的字面大小爲GB,否則Ngen永遠不會產生如此巨大的影響。 – Foxfire 2009-10-24 17:50:31

1

我想你有安全設置設置的方式,以便組裝證書得到驗證。所以它可能會嘗試訪問Web來驗證某個證書,然後等待超時(30秒是非常典型的超時數)。

如果你看看在那30秒內發生了什麼,你可以驗證這一點。對於我的猜測是真實的,在90秒內應該有很少的CPU使用和小硬盤訪問。如果你的CPU使用率很高,或者受到你的硬盤驅動器的限制,那麼它就是別的。

順便說一句:另一種選擇是,如果你的硬盤完全滿了,而且這些部件碎片很多(但在這種情況下90秒會比我所聽說的要多)。

1

試着從視覺工作室開始你的應用程序與「跳過」。這將通過逐步遍歷每個應用程序來啓動代碼,以便您可以檢查需要這麼久的代碼。我曾經這樣做過,結果發現我的sql服務器真的搞砸了。

找出爲什麼需要這麼長時間的另一種方法是在加載代碼中放置分散點並查看瓶頸是什麼。如果應用程序需要90秒之前您的首先喜歡,可能是XCeed的東西,或加載簽名的程序集。

BTW,即時通訊知道有更好的方法來分析你的應用程序,但這種快速「N髒的工作方式相當不錯的,高效的調試此類問題

15

傑森·埃文斯」後確實包含了答案,但在形式的鏈接。我認爲在這裏發佈實際解決方案會很好:

在與可執行文件相同的文件夾中創建一個文件Appname.exe.config(其中Appname是可執行文件的名稱;對於開發,這將在調試輸出文件夾)。這顯示了一個xml文件,假定您在主配置文件中沒有其他條目;如果你有文件了,我想你也只是根據需要添加新的章節/文:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
     <generatePublisherEvidence enabled="false" /> 
    </runtime> 
</configuration> 
+0

謝謝。 順便說一句,我明白我應該把我的答案作爲賈森埃文斯答案的評論。我不是故意要搶先發帖。 [衛生署!什麼是新手!] – MartinKB 2010-01-13 19:43:38

+1

感謝您的答案!我仍然認爲這個鏈接是明確的答案,因爲它包含代碼,問題的解釋以及如何驗證問題的詳細解釋。 – 2010-01-15 00:12:55

2

只是櫃面任何人遇到這個職位,我追蹤的問題遠一點,因爲我是隻是想弄明白並找到了這個頁面。

看來,CRL是您運行的過程中,如果現有的CRL是您的機器上已超時,並沒有用一個新的更新,每次檢查。您可以通過在http://crl.microsoft.com/pki/crl/products/CodeSignPCA.crl處點擊CRL並檢查到期日期來進行測試。現在在IE中配置一個不起作用的代理服務器。將您的機器日期設置爲過期日期並重新測試您的應用程序。

如果你的網卡被禁用,CRL不檢查。

如果你的網卡沒有網關時,CRL不檢查。

如果啓用了代理和網關,則CRL被選中,如果沒有與代理問題,那麼你會遇到這種超時。

如果你連接到互聯網,然後成功將CRL更新,你將被罰款暫且。

我的應用程序是使用一些舊的Xceed組件在.NET 2.0,並已永遠地工作,所以花了一段時間才能找出發生了什麼事情。

相關問題