2013-05-03 60 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。