SORU
23 Aralık 2008, Salı


Ne zaman veri içeriği imha etmeliyim

Şu anda bir uygulama için bir veri Erişim Katmanı yazıyorum. Erişim Katmanı etmeniz sınıfları yaygın kullanımı veri döndürmek için yapar. Şu anda veri veritabanına yansıtmak için özel veri içeriği üye ekledim ve bir kamu yöntemi kaydedin. Kod şöyle görünür:

private DataContext myDb;
public static MyClass GetMyClassById(int id)
{
    DataContext db = new DataContext();
    MyClass result = (from item in db.MyClasss
                      where item.id == id
                      select item).Single();
    result.myDb = db;
    return result;
}

public void Save()
{
    db.SubmitChanges();
}

Bu basite indirgemek değil ama genel bir fikir veriyor. Daha iyi bir yöntem desen bu tür işlemek için var mı? Yeni veri içeriği her zaman başlatmasını ben db ziyaret etmek isteyeyim?

CEVAP
23 Aralık 2008, Salı


Aslında çok fazla bir önemi yok. Bu bir süre önce yaklaşık ETMENİZ için SQL ekibinden Matt Warren sordum ve işte cevap:

Biz uygulanan birkaç nedeni vardır Idisposable:

Eğer uygulama mantığı tutmak gerekiyorsa bir varlık üzerine ötesindeki zaman DataContext ya da kullanılması bekleniyor bu Sözleşmenin uygulanması ile geçerli Elden arıyorum. Ertelenmiş yükleyiciler içinde bu varlık hala referans olacak DataContext ve iradesini kullanmayı deneyin eğer herhangi bir kod gezinmek için çalışırsa ertelenmiş özellikleri. Bu girişimler başarısız olur. Ayrıca imha güçleri DataContext önbelleğinde dökümü bir tek varlıkların hayata önbelleğe varlık kazara olmaz tutmak canlı varlıklar hayata bu DataContext üzerinden, hangisi bir gibi görünen bir şey yoksa neden bellek sızıntısı.

Otomatik olarak kapatır mantığı DataContext bağlantı olabilir bağlantı bırakarak ayartılır açın. DataContext dayanmaktadır tüm numaralandırma uygulama kodu almak beri bir sorgunun sonuçları bir seviyesinde bağımsız sonuna tetikler bağlantıyı kapatmak için. Eğer uygulama IEnumerable kullanır Yerine bir foreach MoveNext yöntemi deyimi C# veya VB, çıkabilirsiniz numaralandırma erken. Eğer uygulama ile ilgili sorunlar deneyimleri bağlantıları kapatmak ve otomatik kapanma davranışı şüpheli çalışma değil, İmha kullanabilirsiniz geçici bir çözüm olarak desen.

Ama aslında değilsingerçektençoğu durumda onları imha etmek gerekir ve bu şekilde tasarlanmış. Ben şahsen tercih yapmak neyse, daha da kolaylaşır kuralına göre "elden her hangi uygular IDisposable" daha hatırlamak yükünü de özel durumlar için - ama sen pek olası sızıntı kaynağı durumundayapınatmanız unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • NikkoNantone

    NikkoNantone

    21 Kasım 2011
  • JeezyVEVO

    JeezyVEVO

    12 Mayıs 2009