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收集期间,您都会遇到性能问题。 –