我有一個使用實體框架6.1和 的C#.NET 4.5控制檯應用程序我使用工作單元模式。代碼的典型例子,我需要一個條目添加到我的tblFills表:使用本地sqlexpress與EF加速性能超過預期。爲什麼?
var fillRep = UnitOfWork.Instance.GetRepository<tblFills>();
fillRep.Add(fill);
UnitOfWork.Instance.Commit();
我的一個模擬,使900數據庫寫入。
使用遠程服務器(在遠程雲服務器上託管SQL Server),我的模擬需要6:21分鐘(6分21秒)。這是平均每個交易25秒(它也在做其他事情)。 在我的代碼開始時,我將10個數據庫寫入到一個虛擬表中來計時......然後用10來分數來獲得我的平均數據庫訪問時間。該仿真顯示了61ms的訪問時間。
我的性能測試代碼:
Private void SqlPerformanceTest()
{
Logger.Debug("Starting SQL Performance Test...");
int iterations = 10;
TempPerformance tp = new TempPerformance();
tp.Quantity = 10;
TimeSpan startTime = DateTime.Now.TimeOfDay;
for (int i = 0; i < iterations; i++)
{
UnitOfWork.Instance.GetRepository<TempPerformance>().Add(tp);
UnitOfWork.Instance.Commit();
}
DateTime elapsedTime = DateTime.Now.Subtract(startTime);
Logger.Debug("Done. Average SQL access for adding entires is: {0} ms", elapsedTime.TimeOfDay.TotalMilliseconds/iterations);
}
我然後我的連接字符串切換到我已運行的本地SQLEXPRESS實例,我的模擬時間從超過6分鐘的時間爲10秒。
這對我來說沒有任何意義,因爲我相信我的數據庫訪問時間是兩次模擬的唯一區別。
有人可以幫我理解嗎?
總結: 1)使用數據庫訪問時間爲61毫秒的外部數據庫,對數據庫進行900次寫入,模擬時間超過6分鐘。 2)使用本地數據庫,同樣的模擬需要10秒鐘。
任何幫助或指針將真正讚賞。
我的遠程服務器在Windows 2008 Server R2 Datacenter上運行SQL Server 2014。我不認爲這很重要,因爲我測量訪問時間,但認爲我會提及它。
感謝 -Ed
謝謝。我想我理解你的回答......我上面所做的61ms往返測量不會完全測量:服務器+ SQL延遲?但我同意你最後的聲明,我會嘗試在同一臺服務器上實現app + db,儘管我需要一個鏡像...... –