这是否包含内存泄漏?我一直在努力更好地了解内存泄漏,但我不知道我是否已经纠正了这个问题?如果没有,我如何正确处理SPweb
对象和SPSite
对象?
using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb()) //Open SP Web
{
SPListCollection collList = oWebsite.Lists; //Open Lists
foreach (SPList oList in collList)
//For Each List Execute this
{
if (!oList.Hidden)
//If the list is hidden do this else nothing
{
ListSitesDropDownBox.Items.Add(new ListItem(SPEncode.HtmlEncode(oList.Title), SPEncode.HtmlEncode(oList.Title)));
ViewState["Item" + counter] = SPEncode.HtmlEncode(oList.Title);
counter++;
}
}
}
答案 0 :(得分:14)
SPWeb
但忘记处置SPSite
正确的方法:
using (var site = new SPSite(webUrl))
using (var web = site.OpenWeb()) {
// ...
}
请注意,这相当于:
using (var site = new SPSite(webUrl)) {
using (var web = site.OpenWeb()) {
// ...
}
}
但我省略了外部using
的大括号以减少代码嵌套。支撑规则与if
相同。
一些风格的评论:
list
。重新说明上述代码的评论没有任何意义。保持建设性,即解释代码的目的。而不是那四条评论,你应该在开头写这样的东西:
// Populate drop-down list with list names and save them in ViewState
答案 1 :(得分:2)
您没有在使用中处理SPSite对象,只有SPWeb。
答案 2 :(得分:0)
其他人已回答了您的问题,但我会补充说您应该通过SPDisposeCheck运行您的构建:http://archive.msdn.microsoft.com/SPDisposeCheck
它并不完美,但它会让你早早发现很多问题。