我目前有一個使用C#編寫的WinForms應用程序。C# - 批處理執行存儲過程
我們所有的更新都是通過執行存儲過程完成的。我們在一個屏幕上有一個情況,在該屏幕上有多達60個更新。目前,每次更新呼叫都會逐一處理,而且客戶端和服務器之間連接速度較慢的某些客戶端遇到速度問題。我非常確定,如果我可以一次將所有這些調用發送到數據庫,那麼它會節省很多客戶端的等待時間(目前對於這60個調用中的每一個來說,ExecuteNonQuery被調用並且客戶機等待在繼續之前爲true/false結果,這導致延遲)。
將所有這些調用捆綁到一個SQL調用中的最佳方式是什麼?正在考慮將所有代碼放入事務中,但需要儘可能避免鎖定,因爲在任何給定點上都有許多併發用戶使用系統。
編輯:存儲特效的目的是從字面上更新服務器上的記錄。我們甚至不需要正在執行的存儲過程的任何響應。從本質上講,我希望捆綁一堆調用的代碼的下方進一個電話,想知道這樣做的最好辦法是
public virtual bool Update(DataRow dataRow, Guid userId)
{
SqlCommand cm = null;
bool ret = true;
try
{
cm = Utilities.GetSqlUpdateCommand(dataRow, userId);
ExecuteNonQuery(cm);
}
catch (SqlException ex)
{
LogDataAccessBaseError(ex);
ret = false;
throw;
}
finally
{
if (cm != null)
{
cm.Dispose();
}
}
return ret;
}
根據您需要什麼樣的準確性,NO LOCK查詢提示可以幫助您避免鎖定。如果你在處理金錢,那麼忘記我甚至說過。但是,如果您處理的是網頁在過去24小時內收到的點擊次數,並且您不在乎它是否已關閉2%,那麼它可能會有所幫助。 –