首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

window服务内存储器不能回收

2013-07-16 
window服务内存不能回收? 给公司弄了个服务自动同步数据,但是占用的内存怎么越来越大了,加了GC.Collect()

window服务内存不能回收?
 给公司弄了个服务自动同步数据,但是占用的内存怎么越来越大了,加了        GC.Collect();
           
这个也不行,不到几个小时内存就大的吓人了。下面是代码

try
{
       object[] ob = new object[3];
                    DataTable dTable = GetTableBySql("select * from TB  ");
                    if (dTable.Rows.Count > 0)
                    {
                        DataSet dSet = new DataSet("tb");
                        dSet.Tables.Add(dTable);
                        ob[0] = dSet;
                        ob[1] = "1";
                        ob[2] = "2";
                        object Reslut = WebServiceHelper.InvokeWebService(url, "METHOD", ob);
                        if (Convert.ToInt32(Reslut) > 0)
                        {
                            ArrayList list = new ArrayList();
                            foreach (DataRow dRow in dTable.Rows)
                            {
                                if (!list.Contains(dRow["T1"].ToString()))


                                {
                                    list.Add(dRow["T1"].ToString());
                                    string sqlText = "update TB SET T1="+dRow["T1"].ToString();

                                    ExeSql(sqlText);
                                }
                            }
                          
                        }
}
catch()
 finally
            {
                GC.Collect();
            }                     上面的字段我替换了,这个代码有问题吗
              
[解决办法]
更详细的垃圾回收内容可以看看CLR via C#中的介绍
[解决办法]

注意使用using , 让它自动clean up
using (DataSet set = new DataSet("office"))
{
    // Put code that adds stuff to DataSet here.


    // ... The DataSet will be cleaned up outside the block.
}

using (DataTable table = new DataTable())
{
}

最主要的,select * from TB 假设有10万条,是不是循环执行10万次ExeSql()
循环执行开销极大
不能考虑拼一个sql 执行么? 比如1000条拼成一个SQL, 执行一次ExeSQL()


[解决办法]
object Reslut = WebServiceHelper.InvokeWebService(url, "METHOD", ob);window服务内存储器不能回收
以前也这么干过,这货就是吃内存的主。每调一次他要重新实列一次。所以不要用动态方式去调WebService.
老实的用引用的方式吧,内存会少很多。

热点排行