Po przeczytaniu Stefan Gossner's post o wyrzucaniu obiektów i tego pytania o Cross method dispose patterns, stwierdziłem, że jestem winny przypadkowego ponownego otwarcia niektórych SPWeb. Wiem na liście Stefana Gossnera, że powinieneś pozbyć się SPWeb po ukończeniu dowolnego obiektu podrzędnego. Jednak w dokumencie microsoft documentation wspomniano o buforowaniu obiektu SPListItemCollection. Czy poniższy kod jest prawidłowy? Czy zwrócony obiekt SPListItemCollection ponownie otworzy obiekt SPWeb? Czy istnieje jakiś sposób, aby powiedzieć na pewno?Czy użycie obiektu SPListItemCollection zwrócony z funkcji ponownie otworzy 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;
}
Edit 09.09.09
Mam na myśli głównie do tej części Stefan Grossner's post:
powinny pozbyciem się SPWeb lub SPSite obiekt po ostatnim dostęp do obiekt potomny tego obiektu.
Wierzę, że mówi, że jeśli użyję SPListItemCollection po tym, jak pozbyć się SPWeb, który użyłem, aby go uzyskać ... SPWeb zostanie automatycznie otwarte ponownie.
Prawdopodobnie mógłbym to zrobić za pomocą Action <>, ale nie sądzę, żeby akcja się kiedykolwiek zmieniła ... Myślę, że to pokonuje cel Akcji <>? Prawdopodobnie wystarczy przenieść cały kod za pomocą SPListItemCollection wewnątrz funkcji GetListItems(), aby być bezpiecznym. –