为什么定义Smo.Server类型的变量会导致10秒的延迟

时间:2013-03-17 15:56:25

标签: vb.net smo

在这里忍受我,好吧!!

我们经常使用SMO来做各种事情,包括检查数据库中是否存在特定的存储过程。所以我们在我们的数据访问类中有一个名为HasProc的方法,它返回一个布尔值。它是应用程序的一部分,一年多来没有改变,可能是两年。

最近,它需要花费很多年(10秒)才能返回一个值,而且我一直试图确定原因。

事实证明,即使定义将保留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逐步执行代码,在Public Function etc..处代码突出显示到达 之前,10秒延迟发生

如果我注释掉Dim语句,则会立即运行。

更奇怪的是,如果我禁用以太网适配器,则不会发生延迟。

这可以在三台计算机上重现。我正在使用我们最近升级的VS2012和SMO v11以支持SQL Server 2012.

另一件事是,即使Return True语句在之前,而不是在Dim语句之后,也会发生延迟。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果该类的静态初始化程序执行网络IO(这通常是一个坏主意),就会发生这种情况。

如果在延迟期间暂停调试器,您可以确切地知道它正在做什么。