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(); }
3 回答
![?](http://img1.sycdn.imooc.com/533e4d5b0001d57502200203-100-100.jpg)
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
writer这个变量你是在函数外声明的吧,从代码看最有可能是这个变量没有被释放掉,因为其他变量你虽然没用using保证他们被及时释放,但声明定义都是在函数内部,理论上说函数结束时他们就会被释放,不过你还是应该把所有可以dispose的变量都在最后dispose()或者用using括起来比较好
[汗,刚发现楼上竟然是dudu,班门弄斧了]
![?](http://img1.sycdn.imooc.com/54586431000103bb02200220-100-100.jpg)
温温酱
TA贡献1752条经验 获得超4个赞
你最好用 DataReader 来读。
直接Fill ,如果数据量大,会全读到内存里面。
没有释放,你可以调用GC.Collect () 强行回收一下看看能否释放。
![?](http://img1.sycdn.imooc.com/533e4c3300019caf02000200-100-100.jpg)
郎朗坤
TA贡献1921条经验 获得超9个赞
占用这么多内存,这个查询返回多少条记录?
另外建议下面的语句放在finally中:
ds.Clear();
ds.Dispose();
usr_table_SqlDataAdapter.Dispose();
MyConn.Close();
writer.Close();
- 3 回答
- 0 关注
- 360 浏览
添加回答
举报
0/150
提交
取消