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

如何解决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,而是查询本身,这很慢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?