2011-07-26 30 views
6

.NET Entity Framework uygulamasında yeniyim ve birkaç milyon satırlık bir tablodaki kayıtlar üzerinde yinelemeyi deniyorum. veriler üzerinde yineleme ikenVarlık Framework sorgusu outofmemoryexception

// select the records from the database 
var records = from data in dataContext.Messages 
       select data; 

// iterate over the messages 
foreach (var record in records) 
{ 
    // do nothing 
} 

bir 'OutOfMemoryException' get: İşte temel kodudur. Sorguyu değiştirebilmem veya ObjectQuery örneğinin belleğini yönetebilmemin bir yolu var mı? fıkra geri geliyor kayıtları kısaltmanın nerede Sorgunuzla değiştirerek gelince

+0

Bu yinelemede ne yaparsınız? – Tigran

+0

[Varlık çerçevesi büyük veri kümesi, bellek istisnası dışında] olası kopyası (http://stackoverflow.com/questions/18169859/entity-framework-large-data-set-out-of-memory-exception) –

cevap

4

Sorun varlık Framework cache çalıştığı şüpheli/tüm bu verileri takip senin Veri kümesi büyükse, sonuçta OutOfMemory Özel Durumuna neden olan nesne bağlamı.

Bunu manuel önlemek için kapalı izleme kapatabilirsiniz:

dataContext.Messages.MergeOption = System.Data.Objects.MergeOption.NoTracking; 

o anda gördüğü anlamına ayrılan bellek veri bağlamında - yani alternatif olarak, bağlam elden kez bu bellek sonunda çöp toplandı alacak Bir kullanım bloğu içindeki daha küçük satır yığınlarını gerçekleştirebilir veya her bir yığın arasındaki hafızayı geri almak için nesne içeriğini el ile imha edebilirsiniz.

+1

Ayarlama NoTracking için MergeOption sorunu çözdü. Teşekkür ederim. – mdeangelo272

+0

Bu yapılandırmayı nerede ayarlıyorum? Hangi sınıfta? – jairhumberto