2013-05-03 23 views
1

在这里,我想知道什么一般认为是更快。要直接序列化到文件流或缓冲区之前

无论是书面形式向直接流在序列数据

using (var fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None)) 
{ 
    TypeSerializer.SerializeToStream(data, fs); 
} 

与前缓冲串行数据,并在一次流每件事写

string buffer = TypeSerializer.SerializeToString(data); 
using (StreamWriter sw = new StreamWriter(file, false)) 
{ 
    sw.Write(buffer); 
} 

我在这里的例子使用ServiceStack.Text为我特别感兴趣的是开发人员对它的看法,但我想这也适用于所有其他序列化方法。

而且我知道的FileStream使用内部缓冲区,但我也不太清楚,如果当例如序列化,不管是什么原因,不可能我可以信任它,比磁盘IO :)

回答

0

这真的取决于慢。

如果您正在讨论大量数据,那么将其加载到内存将会花费。甚至花费很多(更不用说GC需要多少工作才能摆脱这些临时数据) - 这是一种浪费。

在服务器端应用程序中,将所有数据加载到内存中并立即写入所有数据将是一个大吞吐量禁止。这可能是一个性能良好的应用程序与在所有应用程序中不工作时服务器受到压力时的区别。

作为一般的想法,Streaming是要走的路。

就单次调用而言,它实际上取决于数据大小,缓冲区,IO延迟等。需要执行测试以查找神奇数字(块大小)。

关于刷新策略(用于写入的内部缓冲区),您可以始终通过调用流本身或包装StreamWriter上的FlushMethod来确保其持续。

希望这会有帮助, Ofir。

相关问题