1

SqlServer OrmLite 方言を使用した Nuget 経由の ServiceStack 3.9.69

パラメータ化されたストアド プロシージャを実行しようとしていますが、コンパイル モードが に設定されていると異常に遅くなりますdebug。遅い方法は次のConvertToListとおりです。

    Dim result = Db.Exec(Of List(Of Dto.FieldSample))(
        Function(cmd)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "up_GetFieldSample"
            cmd.Parameters.Add(New SqlClient.SqlParameter("@uploadID", uploadId))
            Dim reader = cmd.ExecuteReader()

            Dim converted = reader.ConvertToList(Of Dto.FieldSample)()

            Return converted
        End Function)

(利用可能な拡張機能があることは知ってい.SqlListますが、最初に同じ結果で試してみました。Exec問題がどこにあるかをよりよく理解するために切り替えました)

ストアド プロシージャは、非デバッグ モードで実行すると 2 ~ 3 秒で戻りますが、デバッグ モードでは 15 ~ 20 秒です。デバッグコンパイルにはトレースなどが含まれることが多いことは理解していますが、実際に何がそんなに遅いのかを理解しようとしています。

debugクエリの実行に時間がかかる原因となっているコンパイルで何が起こっていますか?

4

1 に答える 1

3

私が疑ったように、ソースConvertToListを呼び出すときに内部エラー処理/ログが実行されていますPopulateWithSqlReader

根本的な問題は、POCO (decimal?) とデータベース (int) の間のデータ型の不一致でした。接続するまでLogManager.LogFactory = New ConsoleLogFactory()、例外が内部的にスローされ、ログに記録され、次に進むことがわかりませんでした。235 以上 (行) の例外処理が遅延の原因でした。

于 2013-10-27T03:47:37.647 に答える