1
我正在調查我正在進行的實驗性日程安排應用程序中的一些性能問題。我發現撥打session.SaveChanges()
的速度很慢,所以我寫了一個簡單的測試。爲什麼第一個SaveChanges比下面的調用要慢?
你能解釋爲什麼循環的第一次循環需要200ms和後續的循環1-2毫秒?我該如何在應用程序中利用此功能(如果所有後續調用都很快,我不介意第一次調用會變得很慢)?
private void StoreDtos()
{
for (int i = 0; i < 3; i++)
{
StoreNewSchedule();
}
}
private void StoreNewSchedule()
{
var sw = Stopwatch.StartNew();
using (var session = DocumentStore.OpenSession())
{
session.Store(NewSchedule());
session.SaveChanges();
}
Console.WriteLine("Persisting schedule took {0} ms.",
sw.ElapsedMilliseconds);
}
輸出是:
Persisting schedule took 189 ms. // first time
Persisting schedule took 2 ms. // second time
Persisting schedule took 1 ms. // ... etc
以上是對於一個內存數據庫。使用到Raven數據庫實例的http連接(在同一臺機器上),我得到了類似的結果。第一次調用花費明顯更多的時間:
Persisting schedule took 1116 ms.
Persisting schedule took 37 ms.
Persisting schedule took 14 ms.
在GitHub上:RavenDB 2.0 testcode和RavenDB 2.5 testcode。
有什麼方法可以進行某種熱身? – jimmystormig 2015-02-10 13:36:19
只是向RavenDB提出請求,它會處理很多成本,是的。 – 2015-02-12 07:09:07