VC#里加了一个定时器,但是随着运行程序后,发现所占用的内存,随着定时器的触发一点点地增加,好像是资源没有回收的样子,请高手指点一下啊。

解决方案 »

  1.   

    //timer1的Interval值是100
    private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
    label1.Text=DateTime.Now.ToString();
    }就这样,它就一直增加内存占用啊!
      

  2.   

    private int a;a=0;//timer1的Interval值是100
    private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
    label1.Text=(++a).ToString();
    }就算不取系统时间,这样子也不行啊!它还是一直增加内存占用啊!
      

  3.   

    LZ完全不必担心,通过看源代码此方式是一点问题都没有的.
    GC会在适当的时间来执行垃圾回收的,这和C++是不一样的,同时也不存在内存泄漏的问题.关于内存增加的原因是因为这个的操作的".ToString()"字符串是不可编辑或修改的CLASS,每次使用均创建一个新的实例,
    因此不停的创建新实例,旧的实例占用的内存没有释放,内存会增加的,当然在执行垃圾回收后这些内存会释放的.
      

  4.   

    zhiang75(zhiang75):
        我可不可以自己在使用完对象时手动回收,具体应该怎么做呢?
      

  5.   

    可以使用
    GC.Collect();
    进行强制垃圾回收。
      

  6.   

    private void timer1_Tick(object sender, System.EventArgs e)
    {
    Thread th=new Thread(new ThreadStart(GetTime));
    th.Start();

    }
    private void GetTime()
    {
    statusBarPanel6.Text=DateTime.Now.ToLongTimeString();
    }
      

  7.   

    发错了,进行强制垃圾回收,内存增长缓慢.private void timer1_Tick(object sender, System.EventArgs e)
    {
    Thread th=new Thread(new ThreadStart(GetTime));
    th.Start();

    }
    private void GetTime()
    {
    statusBarPanel6.Text=DateTime.Now.ToLongTimeString();
    GC.Collect();
    }