2013-10-26 28 views
1

通過的NuGet ServiceStack 69年3月9日使用SqlServer的OrmLite方言調試編譯中發生了什麼,導致查詢執行時間更長?

我試圖執行一個參數化存儲過程,但是當編譯模式設置爲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編譯時發生了什麼,導致查詢執行時間更長?

回答

3

正如我懷疑,有在ConvertToList正在進行一些內部錯誤處理/記錄時,它調用PopulateWithSqlReaderSource

根本的問題是我的POCO之間和數據庫中的數據類型不匹配(十進制?)(INT) 。直到我連接LogManager.LogFactory = New ConsoleLogFactory(),我纔看到內部拋出異常,記錄下來,然後繼續前進。 235+(行)的異常處理是導致延遲的原因。