0

在这里忍受我,好的!

我们经常使用 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 单步执行代码,10 秒延迟发生在代码高亮到达Public Function etc...

如果我注释掉该Dim声明,它会立即运行。

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

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

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

有任何想法吗?

4

1 回答 1

0

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

如果您在延迟期间暂停调试器,您可以准确了解它在做什么。

于 2013-03-17T15:58:52.623 回答