2011-02-23 30 views
5

Bu bir bellek sızıntısı içeriyor mu? Bellek sızıntılarını daha iyi anlamaya çalışıyorum ama bunu düzelttiğimi anlayamıyorum? Değilse, SPweb nesnesini ve SPSite nesnesini doğru şekilde nasıl imha edebilirim?SharePoint bellek sızıntısı

cevap

13

Evet, öyle. SPWeb'u atıyorsunuz ama SPSite'un imha edilmesini unutun.
doğru yolu bunu yapmak için:

using (var site = new SPSite(webUrl)) { 
    using (var web = site.OpenWeb()) { 
     // ... 
    } 
} 

ama kod iç içe azaltmak için dış using için parantez atlanmış: Bu eşdeğer olduğunu

using (var site = new SPSite(webUrl)) 
using (var web = site.OpenWeb()) { 
    // ... 
} 

Not. Destek kuralları if ile aynıdır.

Birkaç üslup açıklamalar:

  • Lütfen don't use Systems Hungarian in C# code. Sadece list.
  • Yukarıdaki kodu hatırlatan yorumlar hiçbir anlam ifade etmemektedir. Onları yapıcı tutun, yani kodun amacını açıklayın. Başlangıçta böyle yerine bu dört yorumların, Yazdığınız gereken bir şey: senin kullanarak, yalnızca SPWeb Sen SPSite nesne imha edilmez

    // Populate drop-down list with list names and save them in ViewState 
    
+2

+1. Bu, SPxxx nesneleriyle çalışıyorsanız okumanız gereken makaledir - http://msdn.microsoft.com/en-us/library/aa973248.aspx –

+0

Sadece Liste derken ne yazıyorsunuz? – atrljoe

+0

Macarca notasyonları değişken adlandırma için kullanırsınız, yani değişken adlarınızı tip adı kısaltmalarla önekleyin. '' Nesne '' anlamına geldiğini anlıyorum. Ancak bu kesinlikle C# için gerekli değildir çünkü güçlü bir sisteme sahiptir ve VS IntelliSense gibi özelliklere sahip güçlü bir IDE'dir. "OWebsite" yerine "web sitesi" ni kullanmanızı öneririm, "liste" yerine "liste", "listeler" (veya "allLists") yerine clumsy 'collList' et cetera. –

2

.

0

Diğerleri senin soru cevap var, ama senin SPDisposeCheck aracılığıyla kurar çalışıyor olması gerektiğini ekleyeceğiz: http://archive.msdn.microsoft.com/SPDisposeCheck
Mükemmel değil ama erken bir çok problemle sizi tüyo olacak.