2013-03-17 12 views
0

忍受我在這裏,好吧!爲什麼定義一個Smo.Server類型的變量會導致10秒的延遲

我們使用SMO做了很多事情,包括檢查數據庫中是否存在特定的存儲過程。所以我們在我們的數據訪問類中有一個名爲HasProc的方法,它返回一個布爾值。這是應用程序的一部分,在一年甚至兩年內都沒有改變過。

最近,它已經花了很長時間(10s)返回一個值,我一直在試圖找出原因。

事實證明,即使是定義將保持SMO服務器變量(沒有實例,只是將其定義)會導致代碼抵達到功能一個10秒的延遲。

下面的代碼,它只是返回True現在,爲了清楚的相關位:

Public Function HasProc(ByVal storedProcName As String) As Boolean 
    Dim s As Microsoft.SqlServer.Management.Smo.Server 
    Return True 
End Function 

在Visual Studio 12,用F11單步調試代碼,10秒延遲發生代碼之前高亮到達Public Function etc..

如果我註釋掉Dim聲明,它會立即運行。

更奇怪的是,如果我禁用我的以太網適配器,延遲不會發生。

這是在三臺計算機上重現的。我使用VS2012和SMO V11,這是我們最近升級,以支持SQL Server 2012的

的另一件事是,延遲情況發生,即使Return True聲明之前,而不是Dim語句之後。

任何想法?

+0

暫停調試器並查看堆棧跟蹤。 – SLaks 2013-03-17 15:58:08

回答

0

如果該類的靜態初始化程序執行網絡IO(這通常是個壞主意),會發生這種情況。

如果在延遲期間暫停調試器,您可以確切地知道它在做什麼。

+0

不幸的是,調試器停下來的唯一事情就是調用包含SMO調用的方法的那一行。我創建了一個在單獨的行中調用方法的對象,所以它應該在調用HasProc的時候完全實例化。我在「工具」>「選項」>「調試」中啓用了.NET Framework Source步進選項。 – ChrisA 2013-03-17 16:25:59

+0

如果在凍結時再次暫停,會發生什麼情況?在Call Stack窗口中看到什麼? – SLaks 2013-03-17 16:36:34

+0

凍結時暫停在調用方法的行和方法的第一行之間的調用堆棧中沒有任何內容,一旦延遲過去。 – ChrisA 2013-03-17 18:59:30

相關問題