2016-03-31 36 views
1

Bellek eşlemeli bir dosyadan (C# MemoryMappedFile) büyük bir dosyayla (8 GB) çalışıyorum. İçeriği bir WPF ızgarasına koyabilmek istiyorum (örneğin veri şebekesi), ama sorun yaşıyorum çünkü çalışılan her yaklaşım dosyayı hafızaya yüklüyor, bu da hafıza eşlemeli dosyanın noktasını yeniliyor. .Bellek Mapped dosyası bir WPF kılavuzuna dönüştürüldü

Bir wpf veri ızgarasının yalnızca gerekli verilere erişebileceğini biliyorum, ancak sadece görüntülenen ve tüm şeyi belleğe yerleştirmek zorunda kalmadan baytları talep edebilmem için bunu bellek eşlemeli dosyaya nasıl bağlarım? .

Datagrid.itemsource = dosya gibi kolay bir şekilde umuyordum ama bu durum böyle görünmüyor.

Son hedefim, bu büyük dosyayı yüklemek ve dosyanın bir baytını, bir hex editörü gibi göstermek. Herkesin bellek eşlemeli bir dosyayı kullanarak bir örneği vardır veya bir şey sadece kullanıcının görüntülediği dosyayı oluşturan baytları okur?

+0

Neden DataGrid'i kullanmak istiyorsunuz? Sütunlarda ne göstereceksiniz? – Evk

+0

Sütunlar, bayt satırları oluşturmak için dinamik olur. Çoğu hex editörüne benzer – user6141665

cevap

0

Bunun nasıl yapılacağına dair size genel bir bakış sunacağım. Hem UI sanallaştırma hem de veri sanallaştırmasına ihtiyacınız olacak. Veri sanallaştırması için varsayılan DataGrid (VirtualizingStackPanel) sürümünde ücretsiz olarak sahip olduğunuz UI sanallaştırması, özel çözümler kullanmanız gerekir (örnek: https://alphachitech.wordpress.com/2015/01/31/virtualizing-observable-collection/). Her bir öğe, 1 MB'lik ham veriyi temsil edecek, dolayısıyla toplamda, ızgarada yaklaşık 8000 adet ürün olacak. Başlangıçta bu öğelerden hiçbiri veri içermiyor. Veriler, kullanıcı sadece dosyanın ilgili bölümüne kaydırıldığında (sadece yukarıdaki veri sanallaştırmasına bakınız) bellek eşlemeli dosyanızdan okunur. Bu, kullanıcının belleğe yüklendiği gibi 8GB'lık bir dosyayı kaydırmasına izin verirken, kaydırma yaparken gerçekten 1MB'lık parçalar yüklenecek ve boşaltılacaktır.

+0

Tam olarak ihtiyacım olan buydu. Örneklerini takip ettim ve büyük dosyaları minimum etkiyle gösterebiliyorum (10-20MB) – user6141665

+0

Tam olarak ihtiyacım olan buydu. Örneklerini takip ettim ve büyük dosyaları minimum etkiyle gösterebiliyorum (10-20MB) – user6141665