2009-05-22 44 views
19

Çalıştığım başka bir programlayıcıyla bir tartışma yapıyorum. Bir veritabanı dönüş tipi için DataTables - IEnumerable <T>

, birisi DataSets ve datatables ve IEnumerable<T> uygulamak iyilik türlerini ... ya da tam tersi

I kullanmaktan kaçınmak yapmalıdır orada herhangi bir önemli bellek kullanımı veya performans farklılıkları ya da diğer eksileri vardır daha hafif olduğundan, özelliklere erişirken nesneye güçlü bir şekilde yazıldığından, temel türden vb. hakkında daha zengin bilgilere izin verdiğinden, IEnumerable<T> (List<T>, T[] etc) numaralı döndürme türlerini tercih etmeyi tercih edebilirsiniz. Veri okuyucuyu manuel olarak kullanırken daha fazla zaman alırlar.

Bu gün DataTable'ları kullanmanın tek nedeni sadece lazyness mı?

+0

platform/dil? DataTable'ın platforma özel bir yapı olduğunu tahmin ediyorum; ama açık yapmak – Javier

+0

yanıtı kolaylaştırır Sure, platformdur. Net Framework (C# veya vb) 2.0+ – CRice

+0

Ben 2009'dan beri bir DataTable kullandığımı sanmıyorum, onlar – CRice

cevap

18

DataTables, hem bellek gereksinimlerinde hem de bunları oluştururken/doldururken harcadığı işlemci süresinde, Listelerden kesinlikle daha ağırdır.
DataReader'ın kullanılması DataTable'ları kullanmaktan daha hızlıdır (daha ayrıntılı), (bunları doldurmak için bir DataAdapter kullandığınızı varsayalım). sözü

... bu o gerçekten hususlar, muhtemelen her iki şekilde iyiyiz bazı yerde olduğunu ve her iki yöntem yani sadece her durumda daha rahat ne olursa olsun gidin yeterince hızlı olacaktır sürece . (Bazen bunları küçük bir kodla doldurmak istersiniz, bazen bunları küçük bir kodla okumak istersiniz)

Sadece GridView'a bağlandığımda veya birden fazla sonuç kümesine ihtiyacım olduğunda DataTables kullanıyorum. aynı zamanda aktif.

6

DataTable'ları doğrudan kullanmak, altta yatan veri kaynağına ve bunun nasıl oluşturulduğuna bakmak demektir. Bu, sürdürülebilirlik açısından iyi değildir. Eğer tüm görüşün ihtiyaçlarınız bazı nesnelerin bir listesi ise, bunu vermeniz gereken tek şey budur.

9

System.Collections sınıflarını kullanmanın bir başka avantajı, daha iyi sıralama ve arama seçeneklerine sahip olmanızdır. DataTable'ın çeşitlerini veya aramalarını değiştirmenin makul bir yolunu bilmiyorum; toplama sınıfları ile sadece sınıfınızı IComparable veya IEquatable uygulamanız var ve List.Sort ve List.Contains'ın nasıl çalıştığını tamamen özelleştirebilirsiniz.

Listelerle birlikte DBNull hakkında endişelenmenize gerek kalmaz, bu da beni bir kereden fazla tetiklemişti, çünkü boş beklerdim ve DBNull'u aldım.

+3

Sıralama ve arama için bir DataView kullanın. –

8

IEnumerable<T> ile aynı zamanda, koleksiyonun altında yatan türü, uygulamayı çok daha şık kılan yöntem ve özellikler ile artırabileceğiniz ve kodu daha fazla korunabilecek şekilde geliştirmeyi seviyorum. Örneğin, FullName özelliği. Ayrıca, denetiminizin dışındaysa, sınıf için uzantı yöntemleri de ekleyebilirsiniz. Sql yoluyla büyük tablolarla bulundu

public class SomeUser 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get { return String.Format("{0} {1}", FirstName, LastName); } } 
} 
0

, veri tablosu çok daha hızlı yerine IEnumerable oldu. Tek bir HTML sayfasında 26 sütun ile 25 sütun içeren bir tabloyu terk ettim. 3 saniyede Datatable, IEnumerable 9 saniye sürdü. DataTable'a oy veriyorum. Tür hariç tüm kod dizileri aynı.

İlgili konular