<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<TITLE>Message</TITLE>

<META content="MSHTML 6.00.2800.1491" name=GENERATOR></HEAD>
<BODY>
<DIV>
<DIV><SPAN class=947485819-10032005><FONT face=Arial size=2>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 -&nbsp;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.</FONT></SPAN></DIV>
<DIV><SPAN class=947485819-10032005><FONT face=Arial 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=947485819-10032005><FONT face=Arial 
size=2>Brian</FONT></SPAN></DIV></DIV>
<BLOCKQUOTE style="MARGIN-RIGHT: 0px">
  <DIV></DIV>
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><FONT 
  face=Tahoma size=2>-----Original Message-----<BR><B>From:</B> 
  mono-devel-list-admin@lists.ximian.com 
  [mailto:mono-devel-list-admin@lists.ximian.com] <BR><B>Sent:</B> Thursday, 
  March 10, 2005 12:03 PM<BR><B>To:</B> 
  mono-devel-list@lists.ximian.com<BR><B>Subject:</B> Re: [Mono-devel-list] Leak 
  in System.Timers.Timer?<BR><BR></FONT></DIV>
  <DIV>Oh, wait I see you are passing the same one by ref and setting it to 
  null. Do you get different behaviour under windows? <BR><BR><B><I>Joe Audette 
  &lt;joe_audette@yahoo.com&gt;</I></B> wrote: 
  <BLOCKQUOTE class=replbq 
  style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid">
    <DIV>Looks to me like your creating timers in an infinite loop wich would of 
    course continue to consume resources</DIV>
    <DIV>&nbsp;</DIV>
    <DIV>&nbsp;while(true)&nbsp;<BR><FONT 
    size=2>&nbsp;&nbsp;&nbsp;&nbsp;{</FONT> <BR><FONT 
    size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    InitTimeout(ref timeout);</FONT> <BR><FONT 
    size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    System.Threading.Thread.Sleep(10);</FONT>&nbsp;<BR><FONT 
    size=2>&nbsp;&nbsp;&nbsp;&nbsp;}</FONT> </DIV>
    <DIV>&nbsp;</DIV>
    <DIV>true will always be true so you are spinning off a lot of timers right? 
    Or am I missing something?</DIV>
    <DIV>&nbsp;</DIV>
    <DIV>Regards,</DIV>
    <DIV>&nbsp;</DIV>
    <DIV>Joe<BR><BR><BR><B><I>Brian Kroeker &lt;bkroeker@nortel.com&gt;</I></B> 
    wrote:</DIV>
    <BLOCKQUOTE class=replbq 
    style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid">
      <META content="MS Exchange Server version 5.5.2658.2" name=Generator>
      <P><FONT size=2>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:</FONT></P>
      <P><FONT size=2>----------------------</FONT> <BR><FONT size=2>using 
      System;</FONT> </P><BR>
      <P><FONT size=2>namespace TimerTest</FONT> <BR><FONT size=2>{</FONT> 
      <BR><FONT size=2>&nbsp;&nbsp;&nbsp; public class TimerTest</FONT> 
      <BR><FONT size=2>&nbsp;&nbsp;&nbsp; {</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void 
      Main(string[] args)</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      TimerTest test = new TimerTest();</FONT> </P>
      <P><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      test.Run();</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT> </P>
      <P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public 
      TimerTest()</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT> </P>
      <P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void 
      Run()</FONT> <BR><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      {</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      System.Timers.Timer timeout = null;</FONT> </P>
      <P><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      while(true)</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      {</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      InitTimeout(ref timeout);</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      System.Threading.Thread.Sleep(10);</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }</FONT> <BR><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }</FONT> </P>
      <P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void 
      InitTimeout(ref System.Timers.Timer timer)</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      if(timer != null)</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      {</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      timer.Stop();</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      timer = null;</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }</FONT> </P>
      <P><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      timer = new System.Timers.Timer();</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      timer.AutoReset = false;</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimeout);</FONT> 
      <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      timer.Interval = 30000;</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      timer.Start();</FONT> <BR><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT> </P>
      <P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void 
      OnTimeout(object source, System.Timers.ElapsedEventArgs e)</FONT> 
      <BR><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</FONT> 
      <BR><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT> 
      <BR><FONT size=2>&nbsp;&nbsp;&nbsp; }</FONT> <BR><FONT size=2>}</FONT> 
      <BR><FONT size=2>--------------</FONT> </P>
      <P><FONT size=2>Does anyone else see this problem? Am I missing something 
      here? I see the memory usage on my system increase fairly 
      quickly.</FONT></P>
      <P><FONT size=2>Thanks,</FONT> <BR><FONT size=2>Brian</FONT> 
    </P></BLOCKQUOTE><BR><BR>joe_audette@yahoo.com<BR>http://www.joeaudette.com<BR>http://www.mojoportal.com</BLOCKQUOTE></DIV><BR><BR>joe_audette@yahoo.com<BR>http://www.joeaudette.com<BR>http://www.mojoportal.com</BLOCKQUOTE></BODY></HTML>