线程委托内存泄漏的问题
第一段代码 ,存在问题,内存一直呈8k增长,进程句柄一直在增长。
delegate void aa(string s);//创建一个代理
private void pri(string t)//这个就是我们的函数,我们把要对控件进行的操作放在这里
{
if (!label1.InvokeRequired)
{
richTextBox1.Text =t;
}
else
{
aa a1 =new aa(pri);
Invoke(a1,new object []{t});
}
}
private void Form1_Load(object sender, System.EventArgse)
{
Thread newthread = new Thread(new ThreadStart(ttread));
newthread.Start();
}
void ttread()
{
while(true)
{
pri("sdfs");
}
}
第二段代码 ,遇到的问题,内存还是一直增长,但是句柄数正常,没有增长。
System.Timers.Timer t = new System.Timers.Timer(2000);
private void Form1_Load(object sender, EventArgs e)
{
t.Elapsed += new System.Timers.ElapsedEventHandler(Timer_TimesUp);
t.AutoReset = false;
}
int ncount = 0;
private void UpdateUI(string str)
{
ncount++;
this.label1.Text = ncount.ToString();
}
public delegate void MyInvoke(string str);
private void Timer_TimesUp(object sender, System.Timers.ElapsedEventArgs e)
{
t.Stop();
MyInvoke mi = new MyInvoke(this.UpdateUI);
this.BeginInvoke(mi, new object[] { "" });
t.Start();
}
两段代码其实都是在一直执行任务,但是这两段代码,其实都是只是在界面上显示简单的信息,但是为何会一直内存和句柄泄漏呢?是c#本身机制的问题?还是说增长到一定程度,c#会自动回收?
如果能修改,应该怎么改呢?