質問

次のコードでサイトとWebオブジェクトを割り当てる必要がありますか?もしそうなら、どうすればこれを行うことができますか?

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim site As New SPSite(SPContext.Current.Web.Url)
    Dim web As SPWeb = site.OpenWeb()
    web.AllowUnsafeUpdates = True
    Dim lPmr As SPList = web.Lists("NombreList")
    Dim oQuery As New SPQuery()
    Dim itemCollectionPMR As SPListItemCollection

    oQuery = New SPQuery()
    oQuery.Query = ""
    itemCollectionPMR = lPmr.GetItems(oQuery)

 ........        

 End Sub
役に立ちましたか?

解決

ジェームズとトニは絶対に正しいが、明らかな私見を見逃している - あなたのコードにはより深い欠陥があり、これを修正した場合、オブジェクトを処分する必要はありません。

SPContextのSPWEBおよびSPSITEオブジェクトを(可能な場合)使用する必要があります - SharePoint Webパーツインフラストラクチャによってすでに作成されており、独自の作成よりも使用する方が効率的です。

あなたのコードでは、実際にそれらのいずれかをすでに使用して現在のWeb URLを取得していますが、それに関係なく独自のサイトとWebを作成しています - かなり非効率的で必要ありません。

その代わりに

Dim site As New SPSite(SPContext.Current.Web.Url)
Dim web As SPWeb = site.OpenWeb()

ただ使用する必要があります

Dim web As SPWeb = SPContext.Current.Web

SPSite/SPWEBをSPContextから使用する場合、これらを作成するのではなく、それらを処分してはいけません(作成しなかったので、そのままにしておきます)

見る MSDN-ベストプラクティス:使い捨てWindows SharePoint Servicesオブジェクトの使用

SpContextオブジェクトは、SharePointフレームワークによって管理されており、コードに明示的に廃棄するべきではありません。これは、spcontext.site、spcontext.current.site、spcontext.web、およびspcontext.current.webによって返されるspsiteおよびspwebオブジェクトにも当てはまります。

他のヒント

はい、spsite.openweb()を介して作成されたspwebsを処分する必要があります。

それを処分するには、メソッドが完了したら、web.dispose()を簡単に呼び出します。

また、dispose()を直接呼び出す必要なく、使用ステートメントを同じ効果に使用することもできます。

Using site As New SPSite(SPContext.Current.Web.Url)
  Using web As SPWeb = site.OpenWeb()
    web.AllowUnsafeUpdates = True
    Dim lPmr As SPList = web.Lists("NombreList")
    Dim oQuery As New SPQuery()
    Dim itemCollectionPMR As SPListItemCollection

    oQuery = New SPQuery()
    oQuery.Query = ""
    itemCollectionPMR = lPmr.GetItems(oQuery)
  End Using
End Using

+1ジェームズ

また、使用しようとする必要があります SharePointはチェッカーツールを処分します プロジェクトでは、潜在的なメモリリークについてコードを分析し、ベストプラクティスを適用します。

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top