簡體   English   中英

關於在C#中使用內存流的性能問題

[英]Regarding performance issues for usage of memory stream in c#

我創建了一個項目。 很多人一次會使用我的項目。 如果有人出錯,它將通過使用內存流創建對象來寫入文件。 如果每個人都出錯,那么將創建該數量的對象,並且所有對象一次都將錯誤寫入同一文件。 這有什么問題和性能問題嗎?

  1. 似乎不需要使用內存流來寫入文件。 打開/創建文件,然后直接寫入文件。 更好的是: 使用諸如log4net之類的日志記錄庫,該庫將負責同時訪問日志文件。 日志記錄是一項標准任務,無需重新發明輪子。
  2. 如果你擔心性能做負載測試 ,看看是否有其實一個問題。

內存流只是字節數組周圍的Stream接口。

因此,這實際上非常快。

但是整個字節數組都保留在內存中,所以可能由於內存分配過多而導致性能問題。

您是否真的會遇到問題取決於“多人”有多大,以及內存流中的數據量。

如果用“許多人”寫入同一文件,也要注意鎖定問題。

想到文件鎖定/爭用。 您不能創建日志目錄,並讓所有日志寫入都創建自己的文件嗎? 另外,也可以使用.NET跟蹤功能或類似log4net,Common.Logging,dotTrace之類的日志記錄框架來為您消除這些問題。

訪問日志文件時,共享流並在其周圍使用鎖。 請記住在退出時關閉流。

static Object _locker = new Object;
static FileStream fs = new FileStream(...);

// your code
lock(_locker)
{
   fs.Write(...) // write to stream
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM