我需要将 HTML 写入文件系统,我想知道将其转换为字节并使用 FileStream 而不是使用 File.WriteAllText() (或类似的文本方法)写入它是否有任何速度提升。
3 回答
您认为 File.WriteAllText 中会发生什么?最后,它将是撞击磁盘的字节。无论如何,该磁盘不太可能成为该链中缓慢的部分。除非写入的数据非常大,否则我不会担心,只使用我觉得最方便的实现。如果你很好地设计了代码,那么以后如果需要更改就不是一件大事了。
File.WriteAllText在幕后使用 StreamWriter:
public static void WriteAllText(string path, string contents, Encoding encoding)
{
using (StreamWriter writer = new StreamWriter(path, false, encoding))
{
writer.Write(contents);
}
}
您已经有一个字符串,因此将其转换为字节数组将毫无意义,因为无论如何这是在StreamWriter.Flush方法中使用其底层Encoder类执行的。Flush 由 using 子句调用的StreamWriter.Dispose方法调用。这是来自 Flush via reflector 的一个片段:
int count = this.encoder.GetBytes(this.charBuffer, 0, this.charPos, this.byteBuffer, 0, flushEncoder);
你可以看到它有一个 charBuffer。这只是一个 char[] 数组,当您执行StreamWriter.Write(string)时它会写入该数组。
简而言之,您已经有了字符串,只需让较短的 File 方法执行级联调用,因为它使您的源代码更具可读性。也不需要将其转换为字节数组,正如我提到的 StreamWriter 为您完成的。
如果您遇到转换问题,请使用 Encoding.Unicode 作为 3 参数重载中的最后一个参数,因为File.WriteAllText(string,string)使用没有 BOM 的 UTF8。