全局静态变量的改变会让内存持续消耗?

LooseLive 2014-02-26 10:04:12
如下代码,建立一个全局变量txt来储存文本文件word.txt的内容,然后建立一个监视器来监视word.txt的改变,如果word.txt的内容改变后重置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();
}
}
}
}


难道全局静态变量反复的赋值会让内存占用持续增加?一直降不下来?
...全文
465 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
niekangshibendan 2014-02-27
  • 打赏
  • 举报
回复
静态变量的生命周期和程序的周期相同,尽量不要创建静态变量吧!
  • 打赏
  • 举报
回复
不会持续增加,系统会回收的。只不过是时间问题。
bing0804 2014-02-27
  • 打赏
  • 举报
回复
重新赋值完成之后调用下 GC.Collect(),建议用stringbuilder
注册失败 2014-02-26
  • 打赏
  • 举报
回复
引用 3 楼 LooseLive 的回复:
没用的,看来gc不管静态类型的回收?
GC并不会马上回收被废弃的资源,而是自己决定该什么时候回收 而且string会有一个内存驻留技术,如5楼所说,系统会尝试重用它 因此在内存充足的情况下,GC不会回收它,你观察到的内存会多多少少增加一些是正常的。 你可以模拟下内存紧张的局面,然后持续观察一段时间,看看GC是不是会在之后的某个时间点回收那一部分内存
rtdb 2014-02-26
  • 打赏
  • 举报
回复
string是作为一种只读资源分配的, 分配后并不会很快回收,系统会尝试重用它。
LooseLive 2014-02-26
  • 打赏
  • 举报
回复
大牛速来,讨论下
LooseLive 2014-02-26
  • 打赏
  • 举报
回复
没用的,看来gc不管静态类型的回收?
woxiangfei9797 2014-02-26
  • 打赏
  • 举报
回复
string 在每次修改的时候都会重新创建一个对象,所以你每次改的都会被存在内存里直到被释放。 你可以试试StringBuilder类,他的修改是在原对象基础上修改的
灬浪子灬 2014-02-26
  • 打赏
  • 举报
回复
可以直接将需要写的内容写到F:/text.txt 去操作这个文件

111,095

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧