我需要将HTML写入文件系统,我想知道是否有任何速度提升将其转换为字节并使用FileStream编写而不是使用File.WriteAllText()(或类似的文本方法) )。
答案 0 :(得分:10)
您认为File.WriteAllText会发生什么?最后,它将成为击中磁盘的字节。无论如何,该磁盘不太可能成为这个链中的缓慢部分。除非写入的数据非常大,否则我不会担心它,只使用我认为最方便的实现。如果您设计好代码,如果需要,以后更改将不是一件大事。
答案 1 :(得分:7)
首先编写最易读和可维护的代码。然后将来如果遇到性能问题,请寻找瓶颈。
(如果瓶颈与将字符串转换为字节数组有关,我会感到非常惊讶。带有这样的瓶颈将是你的磁盘写入速度)
答案 2 :(得分:2)
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通过反射器的源代码片段:
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)使用UTF8而没有BOM。