基本上我有一堆性能分析[给出了天真的插入]声称70%的时间花费在我们的Web应用程序的高负载同步上,并且主要是在数据读取器内部的SNIReadSyncOverAsync中调用。 (SNIReadSyncOverAsync实际上最终会坐在kernalbase.dll上!WaitForSingleObjectEx)查看这些等待是由调用者启动还是被调用者启动会提供信息。
有没有办法在Visual Studio争用或并发报告中查看(解释)这个?或者其他一些方式?
更重要的是,根据我的理解,是否有办法在数据读取器消耗数据之前查看保存数据的传入缓冲区?
答案 0 :(得分:0)
似乎我的问题不明智。
datareader一次读取一条记录,但它从中读取 底层数据库驱动。数据库驱动程序从中读取数据 块中的数据库,通常使用8千字节的缓冲区。
如果您的结果记录很小而且您不会得到很多,那么他们就是 将全部放入缓冲区,数据库驱动程序将能够 将它们全部提供给数据读取器,而无需询问数据库 了解更多数据。
如果你获取的结果大于缓冲区,那么你将只是 能够读取它的第一部分以及何时不存在数据 网络缓冲区然后datareader将通知sql server下一步发送 数据块。
How much data can be stored in network buffer when datareader is used