将本地 sqlexpress 与 EF 结合使用可以比预期更快地提高性能.为什么?



我有一个使用 Entity Framework 6.1 和 我使用工作单元模式。 我需要向 tblFills 表添加条目的典型代码示例:

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 数据中心上运行 SQL Server 2014。 我认为这并不重要,因为我测量访问时间,但我想我会提到它。

谢谢 -艾德

你的问题的答案在这句话中:远程云服务器

这里重要的不是数据库访问时间,而是网络延迟时间。您的应用程序可能非常健谈,具体取决于存储库和服务客户端的实现方式。在本地这并不重要,但使用云会产生很大的不同。

请确保运行远程部署的应用(即,不是从连接到远程 SQL Server 的本地 PC)运行测试。检查数据库设置的地理位置,以确保数据库服务器和应用服务器位于同一位置,并且完全位于同一数据中心内。

但请注意,你永远不会获得与单层(托管在同一台计算机上的 sql+应用服务器)那样出色的结果,因为此方案根本不使用网络接口。

最新更新