如何与SharePoint对象正确使用使用语句
-
16-10-2019 - |
题
使用SharePoint对象时,使用使用语句的最佳实践是什么?您何时以及如何使用使用语句,因此使用的对象被处置了等?
解决方案
关键是,如果您的代码创建了SPSITE或SPWEB的实例,则必须处置它。但是,如果您使用spcontext的实例,则不应处理它。 IE处置您创建的内容,无论是直接还是间接。
创建自己的实例的示例,因此需要使用:
using(SPSite site = new SPSite("http://server"))
{
}
从Spcontext使用现有对象的示例,因此不需要使用:
SPWeb web = SPContext.Current.Web;
SPSite site = SPContext.Current.Site;
通过调用OpenWeb()来创建SPWEB实例的示例:
using(SPWeb web = SPContext.Current.Site.OpenWeb("http://server/mywebsite"))
{
}
另外,即使抛出异常,也要小心地处置对象,然后将处置呼叫放在最后块中。
try
{
site = new SPSite("http://server");
web = site.OpenWeb();
}
catch(Exception e)
{
//handle it
}
finally
{
if (web != null)
web.Dispose();
if (site != null)
site.Dispose();
}
这些只是几个例子,但是还有很多例子。这里有一个 很好的参考.
此外,您可以使用 spdisposecheck 工具。
其他提示
Microsoft有关于何时处理哪些对象(SPSITE,SPWEB)的最佳实践指南:http://msdn.microsoft.com/en-us/library/ee557362(v=office.14).aspx
另外,Microsoft提供了一个处置检查器工具:http://archive.msdn.microsoft.com/spdisposecheck
黄金法则似乎是:如果您拥有该对象(即通过使用 new
操作员),然后处理它。如果对象来自SharePoint对象模型本身创建的另一个对象,则您不这样做。正如劳里(Laurie)所指出的那样,请使用spdisposecheck确保确保。
虽然上面的答案都很好,但我只想添加一些东西,以清楚一下。
要查看是否需要处置您使用的对象,您可以检查类的MSDN引用(在VS中的声明中按光标在声明时按F1),并检查类是否实现IDISPOSABLE。如果是这样,则仅在实际制作对象时(使用新语句或OpenXXX()方法或类似物)处置对象。
如果您使用使用该语句,则不需要这些对象的尝试键入构造,因为在汇编中,将转换为劳里(Laurie)的最终示例中所见,将使用使用语句转换为try-catch-catch-fin-fine constuction。使用语句是优选的,因为它更优雅,并且可以使您的代码更可读。
SpdisPosecheck似乎是一个不错的工具,但是有了一些常识,您可能不需要它。