改进 SqlFileStream 的数据传输?
Improve data transfer for SqlFileStream?
运行 SQL Server 2014
且 FilestreamEffectiveLevel
设置为 3。因此,我可以使用 SQLFileStream 在 C#
:
中轻松检索文件
using (var stream = new SqlFileStream(path, transactionContext,
FileAccess.Read, FileOptions.SequentialScan, 0))
{
byte[] data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
}
这有效,但看起来这段代码导致网络被 TCP
标有 PSH
标志的包淹没。这实质上意味着 TCP 缓冲区没有得到有效使用。它没有利用我们的 MTU
的 1500 字节,而是主要使用 54 字节(空 ACK
)或 200-300 字节。 (我们 运行 一些测试使用 WireShark
。)
这是什么原因造成的?是驱动程序问题还是我们需要更改 C#
代码以某种方式优化网络利用率?
原来是另一部分代码。 SqlFileStream
表现不错。
运行 SQL Server 2014
且 FilestreamEffectiveLevel
设置为 3。因此,我可以使用 SQLFileStream 在 C#
:
using (var stream = new SqlFileStream(path, transactionContext,
FileAccess.Read, FileOptions.SequentialScan, 0))
{
byte[] data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
}
这有效,但看起来这段代码导致网络被 TCP
标有 PSH
标志的包淹没。这实质上意味着 TCP 缓冲区没有得到有效使用。它没有利用我们的 MTU
的 1500 字节,而是主要使用 54 字节(空 ACK
)或 200-300 字节。 (我们 运行 一些测试使用 WireShark
。)
这是什么原因造成的?是驱动程序问题还是我们需要更改 C#
代码以某种方式优化网络利用率?
原来是另一部分代码。 SqlFileStream
表现不错。