SqlDataReader.GetValuesvalues有时在Azure上花费的时间太长-但有时仅

问题描述

我正在使用的系统使用sqlDataReader从整个系统中的数据库中广泛读取数据。但是,在特定情况下,执行代码行需要花费时间

sqlDataReader.GetValues(values);

可能需要2秒,而不是通常少于1毫秒的时间。这个特定的实例从具有两个不同视图的视图中获取数据,其中条件导致两个相同视图类型的不同数据集,但是很多时候相同的数据都在两个数据集中。通常,记录数在50-200之间,并且时间延迟影响六分之一左右,因此对于100条记录而言,这多了30秒。更奇怪的是,即使在相同的数据下,以一种方式获取数据集也没有延迟,而以另一种方式获取数据集也有特定记录的延迟。

换句话说:

DatasetA
RecordId,ColumnA
1,AAA
2,BBB
3,CCC

DatasetB
RecordId,AAA
3,CCC
5,EEE
6,FFF

数据集A的加载时间少于5毫秒,但是数据集B的加载时间为3秒,这是因为读取数据集A的3,CCCGetValues所花费的时间少于1毫秒。读取数据集B时,GetValues需花费2.7秒以获取完全相同的数据。

这似乎只发生在Azure上,而不发生在我的裸机测试服务器或开发计算机上。

如果在Azure上的sql Server实例和Azure上的Web应用程序之间存在某种程度的延迟,那么我希望这种行为是随机的并且不一致。有没有人看到过这样的东西,或者对如何处理有想法?我很茫然。

谢谢!

解决方法

忍耐是一种美德。

当我在SSMS中运行查询时,我没有等待足够长的时间来完成整个查询。我会得到结果,结果在2秒内填满了我的屏幕,但我从未意识到它实际上是在获取更多记录。因此,我以为要花2秒,实际上花了30秒。我也没有意识到SqlDataReader会在有数据可用时立即开始返回数据,而不一定是在查询完成时才开始返回数据。这就是为什么在GetValues上它将等待直到从服务器返回更多数据的原因。

所以最终问题不在于GetValues,而是查询本身,这很慢。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...