采用forms.Timer的标准用法,如:
this.timer1.Enabled = true;
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
我把this.timer1_Tick全部去掉,也不是以每秒4个字节的长度增加。不去也是一样,导致一天下来,就内存溢出。
当把上面的定时器注释掉,就不长内存了。
winform在最小化的时候能释放内存,于是在采用程序模拟这种动作,是释放内存,好像解决了问题,但是在运行一天下,
还是占了很多内存,原来一天就溢出,现在二天才溢出。
想请教一下,有谁碰到类似的情况?有什么好的解决方法。
因为我们要采用forms.Timer的线程安全的Timer,就是quartz中有状态的Timer,第一次任务完成才能运行第二个任务。
如果采用别的Timer,有没有好的解决方法?
不甚感激。
问题补充:
这是this.timer2_Tick的代码
private void timer2_Tick(object sender, EventArgs e)
{
if (this.RunState == true) //如果程序运行状态为运行
{
timer2.Interval = this.Timer2Length;
try
{
txt_ErrMsg.Text = "start";
RecvFlow();//这两行是功能,就是注释也是一直长内存
SendFlow();
//如果运行到这里还没有出错,则表明可以正常运行
this.Timer2Length = 1; //程序出错的话,改为正常运行
this.TimerLength = 1000;
txt_ErrMsg.Text = "目前软件运行正常";
}
catch (Exception ex) //捕获异常
{
txt_ErrMsg.Text = ex.Message;
this.Timer2Length = 300000; //程序出错的话,改为每5分钟重试一次
this.TimerLength = 300000;
try
{
ShortMsg sm = new ShortMsg();
sm.SendMsg("短信平台错误:" + ex.Message, 8, 1, "106573077777", "15879006238", "错误提示设定");
}
catch { }
}
}
}
我没有采用画刷之类的,
因为form.times是线程安全的,采用for,或嵌套,其它的定时器形式都会死啦。估计是线程上出了问题。
我采用lock(static date)保证了线程安全.但是行不通。
问题补充:
其实我强行采用了System.GC.collect(),同时注释了功能的代码,就是定时器在空转,还是长内存,不过好象慢了一点点。但是没有实质的作用。
代码采用了两个定时器,timer1_Tick是从数据库取一批数据,放在内存中。比如100条。timer1_Tick每s都判断这一批数据是否处理完,处理完就再取。
timer2_Tick是完成处理这一批的功能。处理完一条就删除一条。之后发送出去。
相关推荐
① System.Windows.Forms.Timer ② System.Timers.Timer ③ System.Threading.Timer 现分述如下: 一、System.Windows.Forms.Timer 1、基于Windows消息循环,用事件方式触发,在界面线程执行;是使用得比较多的Timer...
与Windows Forms中的`System.Windows.Forms.Timer`不同,`System.Timers.Timer`在控制台应用或服务中更常见。 使用`System.Timers.Timer`非常直观,主要包括以下几个步骤: 1. 实例化Timer对象,设置间隔时间。例如...
使用C#开发的类似QQ聊天工具的小软件 ... private System.Windows.Forms.Timer timer1; private string SysInf; private System.ComponentModel.IContainer components; public Online(string sysi
本示例项目“Timer_Test.rar”提供了三种不同类型的定时器的实现:System.Windows.Forms.Timer、System.Timers.Timer和System.Threading.Timer。每种定时器都有其特定的应用场景和特性,下面将详细介绍这三种定时器...
与 `System.Windows.Forms.Timer` 相比,`System.Timers.Timer` 更适用于长时间运行的应用程序,因为它可以在应用程序的主线程暂停或挂起时继续运行,提供更精确的时间间隔控制。 #### 三、`System.Timers.Timer` ...
在C#编程语言中,`System.Timers.Timer` 和 `System.Windows.Forms.Timer` 是两种常见的计时器组件,用于实现不同场景下的定时任务。在这个"C#Timer.zip"压缩包中,我们可以推测它包含了一个简单的C#计时器应用示例...
根据给定的文件信息,我们将重点放在理解和解释C#中的`System.Windows.Forms.Timer`以及其在多线程编程中的应用。 ### C#的Timer解析 #### System.Windows.Forms.Timer `System.Windows.Forms.Timer`是一个用于...
C#中提供了三种类型的计时器:基于 Windows 的标准计时器(System.Windows.Forms.Timer)、基于服务器的计时器(System.Timers.Timer)和线程计时器(System.Threading.Timer)。每种计时器都有其特点和使用场景,...
本文将详细介绍在C#编程语言中三种不同的定时器实现方式:`System.Windows.Forms.Timer`、`System.Timers.Timer`以及`System.Threading.Timer`。这三种定时器各有特点,适用于不同场景。 #### 二、`System.Windows....
C#中的Timer类主要存在于System.Threading命名空间下,有两种常见的类型:`System.Threading.Timer` 和 `System.Windows.Forms.Timer`。前者适用于多线程环境,后者主要用于Windows Forms应用程序,与UI交互更紧密...
System.Threading.Timer 是一个简单的轻量计时器... 多线程计时器1:System.Threading.Timer2:System.Timers.Timer特殊目的的单线程计时器:1:System.Windows.Forms.Timer(Windows Forms Timer)2:System.Windows.
this.timer1 = new System.Windows.Forms.Timer(this.components); this.panel3 = new System.Windows.Forms.Panel(); this.textBox1 = new System.Windows.Forms.TextBox(); this.label4 = new System....
本文将详细介绍`System.Windows.Forms.Timer`、`System.Timers.Timer`以及`System.Threading.Timer`三种不同类型的`TIMER`对象,并通过实例演示它们的基本用法。 #### 二、System.Windows.Forms.Timer `System....
private System.Windows.Forms.Timer timer1; private System.Windows.Forms.NumericUpDown ndHour; private System.Windows.Forms.NumericUpDown ndMinute; private System.Windows.Forms.Button btn_OK; ...
本文将详细介绍C#中的三种定时器类:`System.Windows.Forms.Timer`、`System.Threading.Timer`以及`System.Timers.Timer`,并分别给出示例代码和应用场景。 #### 二、`System.Windows.Forms.Timer` 类 `System....
1. **创建自定义控件**:首先,我们需要继承`System.Windows.Forms.UserControl`类,并重写`OnPaint`方法。 2. **绘制背景**:在`OnPaint`方法中,使用`Graphics`对象的`FillRectangle`方法绘制进度条的背景,可以...