模拟慢速数据库连接

时间:2011-05-01 14:21:11

标签: sql-server performance entity-framework testing ado.net

我们正在开发一个胖客户端应用程序,它使用Entity Framework连接到SQL Server数据库。

我们显然使用本地数据库开发,但其中一个要求是在高延迟(例如200ms)的VPN连接上运行时,性能需要是可接受的 *

我认为测试这个的一个好方法是注入 某些 ,这会给每个命令执行增加200ms的延迟,所以它会“感觉”就像真实的一样交易,可以轻松启用/禁用。

关于如何实现这一目标的任何想法?

旁注:会以不同的方式完成它,使用面向服务的架构,在应用服务器和粗粒度接口上进行数据库访问,但这不是我的电话

4 个答案:

答案 0 :(得分:6)

在数据库服务器和客户端之间放置Wanem的实例。 Wanem允许您模拟具有许多配置选项的广域网。不要忘记,除了相当大的延迟,你还必须考虑降低的网络速度。

此设置的最大优点可能是您无需对测试机器进行任何更改。

答案 1 :(得分:2)

另一种方法是在虚拟机中托管数据库,例如VMware,然后您可以调整虚拟机的网络性能,以便获得要测试的确切环境。

答案 2 :(得分:0)

如果您正在寻找编程解决方案并且您正在使用ObjectContext API,您还可以检查EF Provider wrappers。提供程序包装器创建DbCommand的实例。命令由DbCommandWrapper包装,因此您可以将简单的Thread.Sleep引入ExecuteScalarExecuteNonQueryExecuteDataReader。您只能在测试中使用提供程序包装器。

但我同意@fvu提供的解决方案要好得多,并且也适用于DbContext API。

答案 3 :(得分:-2)

为每个开发人员购买一台小型服务器(比如带有硬件raid1和16G内存的机架装置;如果你有多个开发人员,请使用刀片)。无论如何,他们应该真的有一个用于实验目的。将您喜欢的虚拟化平台放在它上面(例如Vmware)。让每个开发人员在此环境中运行多个VM,一个用于DB,一个用于应用程序,以及您需要的任何其他VM。然后,您可以根据需要添加框以模拟应用服务器和数据库之间的延迟。

这不是不合理的,也不需要任何软件许可;无论如何,每个开发人员都需要MSDN订阅许可证才能在Microsoft世界中执行任何操作。这样的订阅允许您运行几乎任意的Microsoft软件用于个人非生产用途。

让开发人员获得一个体面的开发环境并不昂贵,我认为这是值得的。


当然,开发人员不应该在他们的正常开发平台上进行性能测试。性能测试需要基于硬件的专用环境,其配置与生产相同。