वस्तुओं का निपटान करने के बारे में Stefan Gossner's post पढ़ने के बाद और Cross method dispose patterns के बारे में यह प्रश्न, मैंने पाया कि मैं कुछ एसपीडब्ल्यूबी को गलती से खोलने का दोषी था। मैं स्टीफन गॉसनर के पद में जानता हूं कि वह किसी भी बच्चे के ऑब्जेक्ट के समाप्त होने के बाद आपको एसपीवेब का निपटान करना चाहिए। हालांकि, microsoft documentation SPListItemCollection ऑब्जेक्ट को कैशिंग का उल्लेख करता है। क्या निम्न कोड सही है? क्या वापस आए SPListItemCollection एक SPWeb ऑब्जेक्ट को फिर से खोल देगा? निश्चित रूप से बताने का कोई तरीका है?एसपीवेब को फिर से खोलने के लिए एक एसपीएलआईटीआईटेम कोलेक्शन का उपयोग करना होगा?
// is this correct????
private SPListItemCollection GetListItems()
{
SPListItemCollection items = null;
try
{
using (SPSite site = new SPSite(GetListSiteUrl()))
{
using (SPWeb web = site.OpenWeb())
{
// retrieve the list
SPList list = web.Lists[_ListName];
// more code to create the query...
items = list.GetItems(query);
}
}
}
catch (Exception e)
{
// log error
}
return items;
}
संपादित 09/09/09
मैं मुख्य रूप से Stefan Grossner's post के इस हिस्से की बात कर रहा हूँ:
तुम एक करने के लिए पिछले पहुँच के बाद एक SPWeb या SPSite वस्तु निपटाने चाहिए इस ऑब्जेक्ट का बाल ऑब्जेक्ट।
मेरा मानना है कि वह क्या कह रहा है कि अगर मैं SPListItemCollection का उपयोग मैं SPWeb है कि मैं इसे पाने के लिए इस्तेमाल किया के निपटान के बाद ... SPWeb स्वचालित रूप से फिर से खोल दिया जाएगा।
मैं शायद इसे क्रिया का उपयोग करके कर सकता हूं <> लेकिन मुझे नहीं लगता कि कार्रवाई कभी भी बदलेगी ... मुझे लगता है कि कार्रवाई के उद्देश्य को हराता है <>? मुझे बस सुरक्षित होने के लिए GetListItems() फ़ंक्शन के अंदर SPListItemCollection का उपयोग करके सभी कोड को स्थानांतरित करने की आवश्यकता है। –