【发布时间】:2010-12-15 19:39:37
【问题描述】:
我在用 C#(框架 3.5,Visual Studio 2008)编写的 Windows 服务中的内存管理方面遇到了一点问题。
服务运行良好,每 3 分钟使用 Timer 和 CallBack 触发程序。 因此,Windows 任务管理器中的内存在每次计时器运行时都会缓慢增长。
您知道如何解决此问题吗?
为了简化问题,下面是一个非常简单的代码,可以解决同样的问题:
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();
}
}
}
任何帮助将不胜感激!
斯特凡诺
【问题讨论】:
标签: c# memory memory-leaks timer