【发布时间】:2017-05-25 09:20:53
【问题描述】:
我有一个 Windows 服务正在执行 3 个预定的作业。首先是向员工发送电子邮件,了解他们的轮班时间。第二个是获取 Active Directory 信息并将其保存到本地数据库。最后一个是将活动目录照片保存到文件目录。
每个作业都在单独的线程上完成。计时器每 45 秒计时一次。除了服务的内存使用量稳步增加外,一切都运行良好。
您知道是什么原因造成的吗?
Thread[] thread;
protected override void OnStart(string[] args)
{
timer = new System.Timers.Timer();
timer.AutoReset = true;
timer.Enabled = true;
timer.Interval = 1000 * 45;
timer.Start();
timer.Elapsed += Timer_Elapsed;
servisList = new List<IService>() { new ShiftNotification(), new ActiveDirectoryService(), new DirectoryPhotos() };
thread = new Thread[servisList.Count];
}
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
for (int i = 0; i < servisList.Count; i++)
{
if (thread[i] == null)
{
if (TimeControl.CheckTime(DateTime.Now, servisList.ElementAt(i).sProps))
{
thread[i] = new System.Threading.Thread(new System.Threading.ThreadStart(servisList.ElementAt(i).NotifyUsers));
thread[i].Start();
}
}
else
{
if (thread[i].ThreadState != System.Threading.ThreadState.Running)
{
if (TimeControl.CheckTime(DateTime.Now, servisList.ElementAt(i).sProps))
{
thread[i] = new System.Threading.Thread(new System.Threading.ThreadStart(servisList.ElementAt(i).NotifyUsers));
thread[i].Start();
}
}
}
}
}
catch (Exception ex)
{
}
}
【问题讨论】:
标签: c# multithreading memory-leaks timer windows-services