[Mono-devel-list] Leak in System.Timers.Timer?

Rafael Teixeira monoman at gmail.com
Fri Mar 11 13:10:28 EST 2005


Our current gc, is conservative and not very aggressive at freeing
resources, you may be creating your objects way too fast...

Can't you reuse the timer? Seems to be a wiser solution reuing objects
as even a good gc may spend precious processing time if it has to
collect zillions of short-lived objects...

Just my 2 cents, :)


On Thu, 10 Mar 2005 15:07:55 -0500, Brian Kroeker <bkroeker at nortel.com> wrote:
>  
>  
> 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: mono-devel-list-admin at lists.ximian.com
> [mailto:mono-devel-list-admin at lists.ximian.com] 
> Sent: Thursday, March 10, 2005 12:03 PM
> To: mono-devel-list at 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 <joe_audette at yahoo.com> 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 <bkroeker at nortel.com> 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 
> 
> joe_audette at yahoo.com
> http://www.joeaudette.com
> http://www.mojoportal.com
> 
> 
> joe_audette at yahoo.com
> http://www.joeaudette.com
> http://www.mojoportal.com 


-- 
Rafael "Monoman" Teixeira
---------------------------------------
I'm trying to become a "Rosh Gadol" before my own eyes. 
See http://www.joelonsoftware.com/items/2004/12/06.html for enlightment.



More information about the Mono-devel-list mailing list