2009-11-13 99 views
0

當我們打開我們的應用程序並運行Subsonic Select時,我們遇到了一個問題。select需要一段時間才能返回數據。對同一選擇的任何後續調用都會很快運行。 equivilent T-SQL也運行得非常快。就好像SubSonic在第一個連接上緩存了一些東西,並在隨後的連接上重複使用它。查詢運行速度很快,直到我們關閉應用程序並打開一個新的應用程序,第一次運行需要一段時間,但所有後續調用都很快。在第一次運行時查詢速度慢,但在後續調用時速度很快 - Subsonic 2.0

對此的任何想法?我們是否需要升級到更新的版本?

我無法在任何地方找到任何提及。

該應用程序是一個Windows應用程序,雖然我們有一個類似的問題與Web應用程序。查詢是一個簡單的選擇與內部連接:

Dim status As New subsonicdal.Status("statusCode", "active") 
Dim clientPreferencesDataSet As DataSet = New SubSonic.Select(subsonicdal.ClientPreference.ClientIdColumn, subsonicdal.ClientPreferenceType.AssetOrUnitColumn, subsonicdal.ClientPreferenceUsage.UsageTypeColumn) _ 
                   .From(subsonicdal.ClientPreference.Schema) _ 
                   .InnerJoin(subsonicdal.ClientPreferenceType.Schema) _ 
                   .InnerJoin(subsonicdal.ClientPreferenceUsage.Schema) _ 
                   .Where(subsonicdal.ClientPreference.ClientIdColumn).IsEqualTo(clientId) _ 
                   .And(subsonicdal.ClientPreference.StatusidColumn).IsEqualTo(status.Statusid).ExecuteDataSet() 

基本上,如果我把一個斷點Dim clientPreferencesDataSet As DataSet線,執行它需要大約6秒線。如果我再次破產,它立即(不到一秒)。

ClientPreferences具有到ClientPreferenceUsage的外部整數鍵ClientPreferenceType ClientPreferences中有大約70條記錄,ClientPreferenceUsage中有大約70條記錄,ClientPreferenceType中有12條記錄。它是一個非常簡單的結構。如果我運行Subsonic在Mgt Studio中生成的SQL,它將立即生效。我試過InnerJoining狀態表,使用字符串返回的字段,但沒有區別。

回答

1

兩件事情浮現在腦海中:

  • 可能的數據庫連接在第一次使用(懶惰)製成
  • 或者如果它是一個準備好的查詢,第一次運行之後,執行計劃的緩存和後續調用將更快
+0

謝謝Yannick,只是想知道是否有任何標誌可以防止這種行爲。如果使用沒有Subsonic的SqlConnection進行連接,我希望查詢每次都能夠快速運行,所以你的解釋是有效的,我只是想知道爲什麼這會造成明顯的延遲。 – Craig 2009-11-13 13:20:16

1

SubSonic不緩存任何東西 - 它只是試圖執行任何查詢你扔它。這是一個網絡應用程序?如果是這樣(你可能知道),首先加載時間非常緩慢。

您可以提供的更多細節更好 - 比如確定負載問題的測試以及數據庫結構(如果可以的話)。

相關問題