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操作函数如下:
展开
 我来答
百度网友2c1a656
2014-05-19 · TA获得超过2747个赞
知道小有建树答主
回答量:215
采纳率:66%
帮助的人:118万
展开全部
GC.Collect()是垃圾回收,会查询整个软件的所有数据进行一些垃圾回收,所以你运行次数越多,那数据量越大,需要所有数据进行处理回收,所以时间也会增加。我是这么理解的...

还有DataGridView.DataSource赋值次数越多速度会越来越慢以前遇到过....所以在赋值前先DataGridView.DataSource=null;然后再赋值....
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式