当前位置: 首页 > 编程语言 > C#

使用datareader时,可以在网络缓冲区中存储多少数据分享

时间:2023-04-10 22:49:17 C#

C#学习教程:使用datareader时,网络缓冲区可以存储多少数据,但它从底层数据库驱动程序读取它。数据库驱动程序通常使用8KB的缓冲区以块的形式从数据库中读取数据。如果你的结果记录很小而且你没有得到很多,它们将全部放入缓冲区,并且数据库驱动程序将能够将它们全部提供给数据读取器而不需要向数据库请求更多数据。如果你得到的结果大于缓冲区,你将只能读取它的第一部分,当网络缓冲区中没有数据时,数据读取器将通知sqlserver发送下一个数据块。这是我们使用数据读取器的小代码StringselectString="SELECT*FROMPRODUCT";IList客户=newList();使用(varselectCommand=newOracleCommand(connection,selectString)){使用(OracleDataReaderselectReader=selectCommand.ExecuteReader()){if(selectReader.HasRows){while(selectReader.Read()){clients.add(GetDomainObject(selectReader));}selectReader.close();}}}假设PRODUCT表有10,000条记录。所以我想知道网络缓冲区一次可以容纳多少数据?因为当datareader.ExecuteReader()被调用时,reader会取到一块数据,存储到pc的网络buffer中。当调用datareader.read()时,单条数据将从缓冲区转发到读取器。当所有读取都来自缓冲区时,将再次调用数据库并将下一个数据块存储在缓冲区中。我只想知道当从数据库中获取数据时,数据读取器可以在缓冲区中存储多少数据。数据读取器总是从数据库中获取固定数量的行并存储在缓冲区中,还是取决于缓冲区大小?缓冲区大小取决于什么……它取决于ram吗?请讨论与网络缓冲区相关的事情,因为我知道数据阅读器是如何工作的。感谢阅读此默认结果集处理和多个活动结果集和行集以及SQLServer游标,具体取决于您的设置看看TcpClient.ReceiveBufferSize它会告诉您在一次操作中可以读取多少原始数据。“ReceiveBufferSize属性获取或设置您希望在每次读取操作时存储在接收缓冲区中的字节数。此属性实际上为接收传入数据分配网络缓冲区空间。您的网络缓冲区应至少与应用程序缓冲区一样大确保调用NetworkStream.Read方法时所需的数据可用。使用ReceiveBufferSize属性设置此大小。如果您的应用程序将批量接收数据,则应向Read方法传递一个非常大的应用程序缓冲区。如果网络缓冲区小于您在Read方法中请求的数据量,您无法在一次读取操作中检索到所需的数据量。这会产生额外调用Read方法的开销。”然后阅读AboutNetworkStream。阅读此时,您将更好地理解问题答案的复杂性。以上就是C#学习教程:使用datareader时网络缓冲区可以存储多少数据。不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: