当使用数据读取器时,网络缓冲区中可以存储多少数据
本文关键字:数据 缓冲区 存储 网络 多少 读取 | 更新日期: 2023-09-27 17:51:14
所有我们知道的数据阅读器的工作方式
数据读取器每次读取一条记录,但它从底层数据库驱动程序读取。数据库驱动程序以块的形式从数据库中读取数据,通常使用8kb的缓冲区。
如果你的结果记录很小,你没有得到很多,它们都将适合缓冲区,数据库驱动程序将能够把它们全部提供给数据阅读器,而不必向数据库请求更多的数据。
如果你读取的结果大于缓冲区,你将只能读取它的第一部分,当网络缓冲区中没有数据时,datareader将通知sql server发送下一个数据块。
下面是我们如何使用数据读取器的小代码String selectString = "SELECT * FROM PRODUCT";
IList<client> clients = new List<client>();
using (var selectCommand = new OracleCommand(connection, selectString))
{
using (OracleDataReader selectReader = selectCommand.ExecuteReader())
{
if (selectReader.HasRows)
{
while (selectReader.Read())
{
clientes.add( GetDomainObject(selectReader) );
}
selectReader.close();
}
}
}
假设PRODUCT表有10,000条记录。所以我想知道网络缓冲区一次可以容纳多少数据?
,因为当datareader.ExecuteReader()
调用时,读取器将获取一块数据并存储在该pc的网络缓冲区中。当datareader.read()
调用时,单个数据将从缓冲区转发到读取器。当所有的读取都从缓冲区中读取时,将再次调用数据库,下一个数据块将存储在缓冲区中。
我只是好奇知道有多少数据阅读器可以存储在缓冲区当数据从数据库获取。数据读取器将始终从db &存储在缓冲区中还是取决于缓冲区的大小?
缓冲区大小取决于....是否依赖于ram ?
请只讨论网络缓冲区相关的事情,因为我知道数据阅读器是如何工作的。由于
根据您的设置,读取此默认结果集处理和多个活动结果集和行集以及SQL Server游标
查看TcpClient。ReceiveBufferSize它会告诉你在一次操作中可以读取多少原始数据。
" ReceiveBufferSize属性获取或设置每次读取操作期望存储在接收缓冲区中的字节数。此属性实际操作为接收传入数据而分配的网络缓冲空间。
您的网络缓冲区应该至少与应用程序缓冲区一样大,以确保在调用NetworkStream时所需的数据可用。阅读方法。使用ReceiveBufferSize属性来设置这个大小。如果你的应用程序将接收大量数据,你应该给Read方法传递一个非常大的应用程序缓冲区。
如果网络缓冲区小于您在Read方法中请求的数据量,您将无法在一次读取操作中检索所需的数据量。这将导致对Read方法的额外调用的开销。"
,然后阅读有关NetworkStream的内容。读
这样你就能更好地了解问题答案的复杂性。