我正在做一些基准测试,所以我有一个包含2500条记录的SQL数据库。我将这些记录插入到DocumentDB中。
我编写了两行代码,一行使用实体框架将所有2500插入到C#中的数组中。将所有2500从DocuementDB中拉入数组的下一行。
使用的代码:
var test= await Task<Test>.Run(() =>
client.CreateDocumentQuery<Test>(collection.DocumentsLink)
.ToList());
DocumentDB示例耗时超过20秒。 SQL Server系列几乎是即时的。对象是具有5个属性的简单DTO,我通过Internet进行了SQL查询。
我是否误用了DocumentDB?我认为这是为了将你的所有记录都记录到内存然后加入linq。
答案 0 :(得分:15)
@bladefist,您应该能够使用DocumentDB获得更好的性能。例如,请查看此代码存根以及西欧的Azure VM和DocumentDB帐户的输出。
Stopwatch watch = new Stopwatch();
for (int i = 0; i < 10; i++)
{
watch.Start();
int numDocumentsRead = 0;
foreach (Document d in client.CreateDocumentQuery(collection.SelfLink,
new FeedOptions { MaxItemCount = 1000 }))
{
numDocumentsRead++;
}
Console.WriteLine("Run {0} - read {1} documents in {2} ms", i, numDocumentsRead,
watch.Elapsed.TotalMilliseconds);
watch.Reset();
}
//Output
Run 0 - read 2500 documents in 426.1359 ms
Run 1 - read 2500 documents in 286.506 ms
Run 2 - read 2500 documents in 227.4451 ms
Run 3 - read 2500 documents in 270.4497 ms
Run 4 - read 2500 documents in 275.7205 ms
Run 5 - read 2500 documents in 281.571 ms
Run 6 - read 2500 documents in 268.9624 ms
Run 7 - read 2500 documents in 275.1513 ms
Run 8 - read 2500 documents in 301.0263 ms
Run 9 - read 2500 documents in 288.1455 ms
要遵循绩效的一些最佳做法: