0

ここで我慢してください、わかりました!!

SMO は、データベース内の特定のストアド プロシージャの存在を確認するなど、あらゆることを行うために頻繁に使用されます。データ アクセス クラスHasProcには、ブール値を返す というメソッドがあります。1 年以上、おそらく 2 年以上変更されていないアプリケーションの一部です。

最近、値を返すのに何年も (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すべてが即座に実行されます。

さらに奇妙なことに、イーサネット アダプターを無効にすると、遅延は発生しません。

これは、3 台のコンピューターで再現できます。SQL Server 2012 をサポートするために最近アップグレードした VS2012 と SMO v11 を使用しています。

Return Trueもう 1 つのことは、ステートメントがステートメントの後ではなく、前にある場合でも遅延が発生することですDim

何か案は?

4

1 に答える 1

0

これは、そのクラスの静的初期化子がネットワーク IO を実行する場合に発生します (これは一般的に悪い考えです)。

遅延中にデバッガーを一時停止すると、デバッガーが何をしているかを正確に知ることができます。

于 2013-03-17T15:58:52.623 に答える