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