首页 新闻 赞助 找找看

运行这个函数后程序内存没有释放,占了2个G,是什么原因啊

0
[已解决问题] 解决于 2011-01-23 04:17

 private void CreateIndex()
        {
          

 

            writer = new IndexWriter("c:\\index", new StandardAnalyzer(), true);
            writer.SetMaxFieldLength(1000000);

 


            string strConn = "Server=.;uid=2009;pwd=d12345;database=2009new";


            System.Data.SqlClient.SqlConnection MyConn = new System.Data.SqlClient.SqlConnection(strConn);

 

            DataSet ds = new DataSet();

            SqlDataAdapter usr_table_SqlDataAdapter = new SqlDataAdapter("select   channelid,articleid,title,content,updatetime,infopurview from PE_Article where (channelid=1 or (channelid=1009 and classid=144)) and deleted=0 and status=3 order by updatetime desc", MyConn);


            usr_table_SqlDataAdapter.Fill(ds, "PE_Article");

            int i;

            for (i = 1; i < ds.Tables["PE_Article"].Rows.Count; i++)
            {


                Document doc = IndexDocument(ds.Tables["PE_Article"].Rows[i]);
                writer.AddDocument(doc);

             


              
                Application.DoEvents();

            }

            ds.Clear();
            ds.Dispose();
            usr_table_SqlDataAdapter.Dispose();
            MyConn.Close();


            button1.Text = i.ToString() + "OK";

            writer.Optimize();
            writer.Close();
    
        }

问题补充: 谢谢各位,没分了,谅解一下啊,呵呵
freewzx2005的主页 freewzx2005 | 初学一级 | 园豆:8
提问于:2011-01-07 09:14
< >
分享
最佳答案
0

writer这个变量你是在函数外声明的吧,从代码看最有可能是这个变量没有被释放掉,因为其他变量你虽然没用using保证他们被及时释放,但声明定义都是在函数内部,理论上说函数结束时他们就会被释放,不过你还是应该把所有可以dispose的变量都在最后dispose()或者用using括起来比较好

[汗,刚发现楼上竟然是dudu,班门弄斧了]

七月霄雨 | 小虾三级 |园豆:1282 | 2011-01-08 15:21
其他回答(2)
0

你最好用 DataReader 来读。
直接Fill ,如果数据量大,会全读到内存里面。
没有释放,你可以调用GC.Collect () 强行回收一下看看能否释放。

eaglet | 园豆:17139 (专家六级) | 2011-01-07 10:33
0

占用这么多内存,这个查询返回多少条记录?

另外建议下面的语句放在finally中:

ds.Clear();
ds.Dispose();
usr_table_SqlDataAdapter.Dispose();
MyConn.Close();


writer.Close();

dudu | 园豆:31075 (高人七级) | 2011-01-07 11:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册