Title: Message
I haven't installed mono on windows but using the MS Framework I don't see this behavior on windows. Also I don't believe this could be a lapsed-listener, since I'm subscribing to an event in the instance of timer - when all references to timer are gone shouldn't the garbage collector get rid of the object including its event and list of delegates? I didn't think the delegates stuck around after the event went away.
 
Brian
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Thursday, March 10, 2005 12:03 PM
To: mono-devel-list@lists.ximian.com
Subject: Re: [Mono-devel-list] Leak in System.Timers.Timer?

Oh, wait I see you are passing the same one by ref and setting it to null. Do you get different behaviour under windows?

Joe Audette <[EMAIL PROTECTED]> wrote:
Looks to me like your creating timers in an infinite loop wich would of course continue to consume resources
 
 while(true) 
    {
                InitTimeout(ref timeout);
                System.Threading.Thread.Sleep(10); 
    }
 
true will always be true so you are spinning off a lot of timers right? Or am I missing something?
 
Regards,
 
Joe


Brian Kroeker <[EMAIL PROTECTED]> wrote:

I'm seeing what looks like a memory leak somewhere in System.Timers.Timer. I'm using mono 1.1.4 on a linux system. The code I used to reproduce the problem is:

----------------------
using System;


namespace TimerTest
{
    public class TimerTest
    {
        static void Main(string[] args)
        {
            TimerTest test = new TimerTest();

            test.Run();
        }

        public TimerTest()
        {
        }

        public void Run()
        {
            System.Timers.Timer timeout = null;

            while(true)
            {
                InitTimeout(ref timeout);
                System.Threading.Thread.Sleep(10);
            }
        }

        private void InitTimeout(ref System.Timers.Timer timer)
        {
            if(timer != null)
            {
                timer.Stop();
                timer = null;
            }

            timer = new System.Timers.Timer();
            timer.AutoReset = false;
            timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimeout);
            timer.Interval = 30000;
            timer.Start();
        }

        private void OnTimeout(object source, System.Timers.ElapsedEventArgs e)
        {
        }
    }
}
--------------

Does anyone else see this problem? Am I missing something here? I see the memory usage on my system increase fairly quickly.

Thanks,
Brian



[EMAIL PROTECTED]
http://www.joeaudette.com
http://www.mojoportal.com


[EMAIL PROTECTED]
http://www.joeaudette.com
http://www.mojoportal.com

Reply via email to