C# 文件I/O最佳实践-字节[]还是FileStream?
我目前正在处理许多不同的文件类型(txt、二进制、office等)。我通常使用C# 文件I/O最佳实践-字节[]还是FileStream?,c#,.net,performance,stream,filestream,C#,.net,Performance,Stream,Filestream,我目前正在处理许多不同的文件类型(txt、二进制、office等)。我通常使用byte[]或string将文件数据保存在内存中(在写入/解析时),为了将其读/写到文件中,我在数据完全处理后使用FileStream写入整个数据 在为文本文件生成数据时,是否应该使用TextStream而不是string 在为二进制文件生成数据时,是否应该使用FileStream而不是byte[] 使用流是否会给我带来更好的性能,而不是计算整个数据并在最后一次性输出 文件I/O应该始终使用流,这是一条一般规则,还是
byte[]
或string
将文件数据保存在内存中(在写入/解析时),为了将其读/写到文件中,我在数据完全处理后使用FileStream
写入整个数据
- 在为文本文件生成数据时,是否应该使用
而不是TextStream
string
- 在为二进制文件生成数据时,是否应该使用
而不是FileStream
byte[]
- 使用流是否会给我带来更好的性能,而不是计算整个数据并在最后一次性输出
- 文件I/O应该始终使用流,这是一条一般规则,还是在某些情况下我的方法很好
最后,我会说,编写一些简单的测试程序,并对每个程序的性能进行计时。如果您担心性能差异,这将为您提供最佳答案。除了讨论数据的大小之外,另一个重要问题是数据的用途。处理字符串和数组时,操作更容易执行。如果字符串和数组都同样方便,那么最好使用字节数组。必须解释字符串,这会带来复杂性(编码、BOM等),因此会增加出现错误的可能性。仅对文本使用字符串。二进制数据应始终由字节数组或流处理 每次不必执行任何操作,或者主题数据非常大,或者主题数据输入速度非常慢时,都应该考虑流。流是一种逐部分处理数据的自然方式,而字符串和数组通常希望数据在处理之前完整地存在 在流中工作通常会产生性能,因为它提供了异步读取和写入不同通道的可能性 为文本文件生成数据时 如果文件数据刷新是立即进行的,则您的选择超出了范围。若否,则为 为二进制文件生成数据时
这是一种选择。此外,最好是通过memstream。流是对数据序列的抽象。没有什么可以阻止流完全在内存中。因此是一个MemoryStream。当然,将文件加载到MemoryStream本质上与字节[]相同,只是为了抽象。然而,就这个问题而言,值得注意的是,文件流不会将整个文件加载到内存中(除了一些缓冲等)。@Marcus-你能展示一些在文件I/O上下文中具有C#async/await功能的示例吗?@Geotarget:很多示例都可以在Microsoft网站上找到,例如:更新了一点我的答案。它应该涵盖你所有的问题。