0
以下代碼創建一個全局變量來存儲文本文件txt word.txt的內容,然後創建一個監視器來監視word.txt中的更改,如果內容更改word.txt reset txt變量。運行該程序後,如果我的word.txt內容填充100MB,內存使用量自然會增加,但是接下來我會將word.txt內容轉換爲只有一個字符,內存佔用不下來,但會增加少一些。更改全局靜態變量內存將繼續消耗?
public class Program
{
public static string txt = "aaa";
static void Main()
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(@"D:\ConsoleApplication1", "word.txt");
fileSystemWatcher.Changed += new FileSystemEventHandler(ReloadHandler);
fileSystemWatcher.NotifyFilter = NotifyFilters.Size;
fileSystemWatcher.EnableRaisingEvents = true;
Console.ReadLine();
}
private static void ReloadHandler(object sender, FileSystemEventArgs e)
{
ReloadTxtContent();
}
private static void ReloadTxtContent()
{
txt = null;
using (FileStream fs = new FileStream(@"D:\ConsoleApplication1\word.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default))
{
txt = sr.ReadToEnd();
}
}
}
}
全局靜態變量賦值是否會反覆增加內存使用量?已被裁減?
小對象相同 – LooseLive
是的,但是更小的物體都在GC代。他們被收集和壓縮。 LOH沒有被壓縮,因此記憶「使用量」仍然很高。如果指定它,它可以在.NET 4.5中進行壓縮。但是在每次Gen 2收集期間,您都會遇到性能問題。 –