title: c# windows service problem with memory (memory leak?)
body: <p>I have a little problem with memory management in a Windows Service written in C# (framework 3.5, visual studio 2008).</p>
  
  <p>The service run fine, with a Timer and a CallBack the fire the procedure every 3 minutes.
  Therefore, the memory in the Windows Task Manager slowly growing at every timer's run.</p>
  
  <p>Have you an idea to how resolve this issue?</p>
  
  <p>To simplify the problem, below is a very simple code that exibits the same problem:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Diagnostics;
  using System.Linq;
  using System.ServiceProcess;
  using System.Text;
  using System.Threading;
  using System.IO;
  
  namespace svcTest
  {
  public partial class svcTest : ServiceBase
  {
  
      private Timer tmr;
      private TimerCallback tmrCallBack;
  
      public svcTest()
      {
          InitializeComponent();
      }
  
      protected override void OnStart(string[] args)
      {
          FileStream fs = new FileStream(@"c:\svclog.txt", FileMode.OpenOrCreate, FileAccess.Write);
          StreamWriter m_streamWriter = new StreamWriter(fs);
          m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
          m_streamWriter.WriteLine("Service Started on " + DateTime.Now.ToLongDateString() + " at " + DateTime.Now.ToLongTimeString());
          m_streamWriter.WriteLine(" *----------------*");
          m_streamWriter.Flush();
          m_streamWriter.Close();
  
          tmrCallBack = new TimerCallback(goEXE);
          tmr = new Timer(tmrCallBack, null, 0, 1000 * 60 * 1 / 2);
      }
  
      protected override void OnStop()
      {
          FileStream fs = new FileStream(@"c:\svclog.txt", FileMode.OpenOrCreate, FileAccess.Write);
          StreamWriter m_streamWriter = new StreamWriter(fs);
          m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
          m_streamWriter.WriteLine("Service Stopped on " + DateTime.Now.ToLongDateString() + " at " + DateTime.Now.ToLongTimeString());
          m_streamWriter.WriteLine(" *----------------*");
          m_streamWriter.Flush();
          m_streamWriter.Close();
  
          tmr.Dispose();
      }
  
      private void goEXE(Object state)
      {
          Console.WriteLine(DateTime.Now.ToString());
  
          FileStream fs = new FileStream(@"c:\svclog.txt", FileMode.OpenOrCreate, FileAccess.Write);
          StreamWriter m_streamWriter = new StreamWriter(fs);
          m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
          m_streamWriter.WriteLine("Service running on " + DateTime.Now.ToLongDateString() + " at " + DateTime.Now.ToLongTimeString());
          m_streamWriter.WriteLine(" *----------------*");
          m_streamWriter.Flush();
          m_streamWriter.Close();
  
      }
  
      }
  }
  </code></pre>
  
  <p>Any help will be appreciated!</p>
  
  <p>stefano</p>