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