Stream.Seek(0, SeekOrigin.Begin) or Position = 0
本文关键字:or Position Begin SeekOrigin Seek Stream | 更新日期: 2023-09-27 18:07:13
当你需要重置流到开始(例如MemoryStream
)时,使用
stream.Seek(0, SeekOrigin.Begin);
或
stream.Position = 0;
我看到两者都很好,但想知道是否一个比另一个更正确?
设置绝对位置时使用Position
,设置相对位置时使用Seek
。两者都是为了方便而提供的,因此您可以选择适合代码风格和可读性的一种。访问Position
要求流是可寻的,因此它们可以安全地互换。
您可以查看这两个方法的源代码来查找:
- 位置属性
https://referencesource.microsoft.com/mscorlib/系统/io/memorystream.cs, 320 - 查找方法
https://referencesource.microsoft.com/mscorlib/系统/io/memorystream.cs, 482
成本几乎相同(3 if
s和一些算术)。然而,这只适用于跳转到像Position = 0
这样的绝对偏移量,而不适用像Position += 0
这样的相对偏移量,在这种情况下,Seek
似乎稍微好一些。
但是,您应该记住,我们谈论的是一些整数运算和if
检查的性能,这甚至不能用基准测试方法精确测量。就像其他人已经指出的那样,没有显著的/可检测的差异。
如果您正在处理文件(例如:与FileStream类),似乎Seek(0, SeekOrigin.Begin)能够保持内部缓冲区(如果可能的话),而Position=0将始终丢弃它。