目的
測試EF框架在一次連接中多次保存和多次連接的耗時對比
測試環境
- 數據庫SqlServer 2012 R2
- EF框架6.2.0版本
數據庫內容
ID | UserName | Password | CreateTime |
---|---|---|---|
1 | 111 | 123 | 2019-07-17 12:12:12 |
2 | 222 | 123 | 2019-07-17 12:12:12 |
代碼
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EFConnectTest
{
class Program
{
static void Main(string[] args)
{
for(int i=1; i<=10; i++)
{
var task1 = Task.Factory.StartNew<long>(Connect1);
task1.Wait();
Console.WriteLine(string.Format("第{0}次測試,連接一次的情況下耗時{1}ms", i, task1.Result));
var task2 = Task.Factory.StartNew<long>(Connect2);
task2.Wait();
Console.WriteLine(string.Format("第{0}次測試,連接多次的情況下耗時{1}ms", i, task2.Result));
Console.WriteLine(string.Format("平均每次連接多耗時{0}ms{1}", (double)(task2.Result - task1.Result) / Count, Environment.NewLine));
}
Console.ReadLine();
}
/// <summary>
/// 執行次數
/// </summary>
private static int Count = 1000;
public static long Connect1()
{
Stopwatch sw = new Stopwatch();
sw.Restart();
using (TestEntities dbContext = new TestEntities())
{
var i = 0;
while (i < Count)
{
var userList = dbContext.User.ToList();
foreach (var user in userList)
{
user.UserName = i.ToString();
}
i++;
dbContext.SaveChanges();
}
}
sw.Stop();
return sw.ElapsedMilliseconds;
}
public static long Connect2()
{
Stopwatch sw = new Stopwatch();
sw.Restart();
var i = 0;
while (i < 1000)
{
using (TestEntities dbContext = new TestEntities())
{
var userList = dbContext.User.ToList();
foreach (var user in userList)
{
user.UserName = i.ToString();
}
i++;
dbContext.SaveChanges();
}
}
sw.Stop();
return sw.ElapsedMilliseconds;
}
}
}
測試結果
第1次測試,連接一次的情況下耗時7150ms
第1次測試,連接多次的情況下耗時4912ms
平均每次連接多耗時-2.238ms
第2次測試,連接一次的情況下耗時4518ms
第2次測試,連接多次的情況下耗時5217ms
平均每次連接多耗時0.699ms
第3次測試,連接一次的情況下耗時4548ms
第3次測試,連接多次的情況下耗時5719ms
平均每次連接多耗時1.171ms
第4次測試,連接一次的情況下耗時4137ms
第4次測試,連接多次的情況下耗時5456ms
平均每次連接多耗時1.319ms
第5次測試,連接一次的情況下耗時4136ms
第5次測試,連接多次的情況下耗時5771ms
平均每次連接多耗時1.635ms
第6次測試,連接一次的情況下耗時4237ms
第6次測試,連接多次的情況下耗時5570ms
平均每次連接多耗時1.333ms
第7次測試,連接一次的情況下耗時4233ms
第7次測試,連接多次的情況下耗時5109ms
平均每次連接多耗時0.876ms
第8次測試,連接一次的情況下耗時4746ms
第8次測試,連接多次的情況下耗時5132ms
平均每次連接多耗時0.386ms
第9次測試,連接一次的情況下耗時4797ms
第9次測試,連接多次的情況下耗時5033ms
平均每次連接多耗時0.236ms
第10次測試,連接一次的情況下耗時4342ms
第10次測試,連接多次的情況下耗時5209ms
平均每次連接多耗時0.867ms
結果分析
第一次測試由於首次連接數據庫結果不准,使用其他9組測試數據進行耗時分析
每次連接的多耗時0.937ms