c# 中关于GC.Collect() 执行时间变长的问题
首先我知道这个函数是基本不需要用的,但是最近遇到了一个奇怪问题,麻烦大家看一下.下面是部分代码.这个需要在规定时间(100ms)内做完某事,并更新UI界面中的DataGr...
首先我知道这个函数是基本不需要用的,但是最近遇到了一个奇怪问题,麻烦大家看一下.下面是部分代码.
这个需要在规定时间(100ms)内做完某事,并更新UI界面中的DataGridView.
void TestGC()
{
while (true)
{
double dTime;
dTimeall = 0;
Thread.Sleep(20); //做其他一些工作
sw.Start();
GC.Collect(); //回收垃圾
iNum++; //统计执行次数
dTime = sw.Elapsed.TotalMilliseconds;
dTimeall += dTime; //GC运行需要时间,因为GC运行主线程也是暂停的,所以这样统计应该没问题.
sw.Stop();
sw.Reset();
try
{
this.upview1 = new System.Threading.Thread(update_gridview1); //invoke
upview1.IsBackground = true;
this.upview1.Start(); //更新UI界面
Thread.Sleep(10); //给一定的时间更新,如果不加这一行只更新部分
}
finally
{
if (upview1.IsAlive) //线程仍在运行,就舍弃
{ upview1.Abort(); }
this.upview1 = null; //为了回收
Console.WriteLine(iNum.ToString() + "-----------" + dTimeall.ToString());
}
}
}
运行后发现,GC的运行时间会随着次数的增多而增加,但是如果去掉更新UI的部分(upview1),时间就不会增加.
分少了点,麻烦大家了.
UI操作函数如下: 展开
这个需要在规定时间(100ms)内做完某事,并更新UI界面中的DataGridView.
void TestGC()
{
while (true)
{
double dTime;
dTimeall = 0;
Thread.Sleep(20); //做其他一些工作
sw.Start();
GC.Collect(); //回收垃圾
iNum++; //统计执行次数
dTime = sw.Elapsed.TotalMilliseconds;
dTimeall += dTime; //GC运行需要时间,因为GC运行主线程也是暂停的,所以这样统计应该没问题.
sw.Stop();
sw.Reset();
try
{
this.upview1 = new System.Threading.Thread(update_gridview1); //invoke
upview1.IsBackground = true;
this.upview1.Start(); //更新UI界面
Thread.Sleep(10); //给一定的时间更新,如果不加这一行只更新部分
}
finally
{
if (upview1.IsAlive) //线程仍在运行,就舍弃
{ upview1.Abort(); }
this.upview1 = null; //为了回收
Console.WriteLine(iNum.ToString() + "-----------" + dTimeall.ToString());
}
}
}
运行后发现,GC的运行时间会随着次数的增多而增加,但是如果去掉更新UI的部分(upview1),时间就不会增加.
分少了点,麻烦大家了.
UI操作函数如下: 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询