在这里忍受我,好吧!!
我们经常使用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
语句之后,也会发生延迟。
有什么想法吗?
答案 0 :(得分:0)
如果该类的静态初始化程序执行网络IO(这通常是一个坏主意),就会发生这种情况。
如果在延迟期间暂停调试器,您可以确切地知道它正在做什么。