2009-03-09 17 views
14

Şu anda, LAN'ımın etrafına göndermek üzere nesneleri seri hale getirmek ve serileştirmek için ikili biçimlendiriciyi (Uzak Çekim) kullanıyorum.En hızlı seri hale getirici ve en düşük bellek alanıyla birlikte desiterizer C#?

Son zamanlarda 2.0'dan .NET 3.5'e yükselttim. 3.5, serileştirme performansını geliştirmek için yeni türler tanıttı mı?

DataContractSerializer numaralı telefonu inceledim, ancak bu, XML'ye doğru bir şey serileştiriyor ... bu da bellek ayak izini artırmalı.

LAN'ım arasında nesne göndermek için en hızlı seri hale getirici hangisidir? Bir etkileşimle veya sürümle ilgilenmiyorum…. Hıza ihtiyacım var!

Üçüncü taraf açık kaynaklı alternatiflere açığım.

+0

Burada iki soru var gibi görünüyor ... En hızlı serileştirme bir, diğeri en düşük mem ayak izi ile serileştirme. –

+0

@Mauricio: Her zaman bir denge meselesi. Normalde iki özellik arasında en uygun olanı araştırırsınız, böylece ikisini de aynı anda düşünürsünüz. –

+0

olası bir çoğaltması [.NET nesnesini serileştirmek ve serileştirmek için en hızlı yol] (http://stackoverflow.com/questions/4143421/fastest-way-to-serialize-and-deserialize-net-object) – nawfal

cevap

8

Aradığınızı tam olarak Protocol Buffers gibi görebilirsiniz.

Şu anda farkında olduğum üç .NET uygulaması var: protobuf-net, protobuf-csharp-port ve Proto#.

performance comparisonsperformance comparisons, Protokol Tamponlarının, yerleşik serileştiricilerden hem boyut hem de serileştirme/serileştirme hızı açısından daha iyi performans gösterdiğini göstermektedir.

+6

Bunlar arasındaki fark nedir? üç .NET uygulaması? –

+1

@StefanSteinegger Farklı geliştiriciler tarafından protobufun farklı uygulamalarıdır.Şu andaki durumlara gelince: proto # ortadan kalkar gibi görünüyor, hem protobuf-net hem de protobuf-csharp-portu mükemmel geliştiriciler tarafından uygulandı. Doğru bağlantılar https://github.com/mgravell/protobuf-net ve https://github.com/jskeet/protobuf-csharp-port şeklindedir. – atlaste

2

@Luke tarafından bağlı performance comparison'da, DataContractJsonSerializer'un diğer MS serileştiricilerle karşılaştırıldığında çok iyi performans gösterdiğini unutmayın.

JSON'un her yerde kullanılabilirliği ve DataContractJsonSerializer'u kullanabilme kolaylığı göz önüne alındığında, "protokol arabelleklerini" kullanmanın pek bir nedenini göremiyorum. Diller ve platformlar arasında zıplarken JSON hata ayıklamak daha kolay olacak ve güzel sıkıştırır.

(Google CS 101 kavramlarını alır ve bunları uygulamakla ünlü hale nasıl seviyorum. C, biz "protokol tampon" "yapı" lar. Bu büyük iş diyoruz.)

+0

C yapıları (veya benim durumumda C++) harika olurdu, ancak .Net (OP tarafından gerektiği gibi) ve Java sadece yapının verilerini serileştirmiyor, aynı zamanda yapı tanımını bir noktaya serileştiriyorlar. Ayrıca, protokol tamponu _ "geri bildirim uyumluluğu kırmadan mesaj biçimlerinize yeni alanlar eklemenizi sağlar", [bkz. Geliştirici Kılavuzu] (https://developers.google.com/protocol-buffers/docs/overview). – Trisped

5

Ben bazı benchmarks for the leading .NET serializers mevcut dayalı Northwind veri kümesi.

ikili protobuf-net hızlı uygulamalar kullanıma Microsoft en hızlı seri hale BCL (XML DataContractSerializer) yaklaşık 7x hızlıdır benchmarked olduğunu @marcgravell.

Microsoft'un JsonDataContractSerializer oldukça yavaştır - yavaş o protobuf-net 9xüzerinde ve JsonSerializer kendi daha yavaş 3.6x bitti.

+0

Simon Hewitt'in kütüphanesi ne olacak? Bkz. .NET'te Serialization'u İyileştirme - bölüm 2] (http://www.codeproject.com/dotnet/OptimizingSerialization2.asp) * veya * [.NET'te büyük nesneleri nasıl serileştiririz?] (Http: // stackoverflow. com/sorular/709399/how-to-serialize-büyük-in-net-OutOfMemory nesneler-istisnalar/1290530 # 1290530) *. –

0

this answer numaralı belgede gösterildiği gibi, oluşturulan kod en hızlı seri hale getirici olabilir. Bununla birlikte, erken bir aşamadadır ve hala diğer serileştiricilerin sunduğu birkaç özellikten yoksundur.

İlgili konular