2011-08-29 16 views
5

Enyim.Caching için memcached istemcisi C# ile çalışıyorum.Memcached içinde karmaşık bir nesne depolanamıyor

MemcachedClient mc = new MemcachedClient(); 
XmlDocument xmlDocument = new XmlDocument(); 
mc.Store(StoreMode.Set, "foo", xmlDocument); 
object myXml= mc.Get("foo"); 

http://memcached.org http://memcached.org http://memcached.org http://memcached.org http://memcached.org http://memcached.org ve xxx xzxx xzxx http://memcached.org http://memcached.org http://memcached.org http://memcached.org http://memcached.org http://memcached.org xz x Amaç: HttpCache'yi Memcached için kodumda değiştirmeye çalışıyorum ama HttpCache ile önbelleğe karmaşık nesne ekleyebilirim.

Burada XmlDocument bir örnektir fakat basit bir sınıfla birlikte çalışmıyor

+0

Kullandığınız memcache yapısı nedir? Pencerelerde [this] (http://www.couchbase.com/products-and-services/memcached) kullanmanızı öneririm. – Dasun

+0

Ubuntu ile http://memcached.org adresinde çalışıyorum ve tüm sunucumu değiştirmeden önce, çözümünüzle karmaşık nesne depolayabileceğimi onaylayabilir misiniz? –

+0

'XmlDocument' ikili' [Serializable] 'olarak görünmüyor. XML'in dize gösterimini kullanın, yani xmlDocument.OuterXml'. –

cevap

9

çalışmaz, bu nesnelerin düz dönüştürülebilir sağlar bayt veri gösterimi ve daha sonra Memcached sunucusuna gönderilir.

Örneğinizde, ikili seri hale getirilemeyen XmlDocument kullanın. Sen ve stringdan dönüştürerek bu çalışabilirsiniz serileştirilebilir ikili geçerli: SerializableAttribute Class: Kendi özel sınıflar için

MemcachedClient mc = new MemcachedClient(); 
    XmlDocument xmlDocument = new XmlDocument(); 
    mc.Store(StoreMode.Set, "foo", xmlDocument.OuterXml); 
    string myXml = mc.Get("foo"); 
    XmlDocument xmlDocumentOut = new XmlDocument(); 
    xmlDocumentOut.LoadXml(myXml); 

, sen [Serializable] öznitelik eklemek ve ikili seri için kurallara uymak gerekir.

+0

XmlDocument'in bellek baskısını ekleyemiyorum? ünkü, buradaki amaç, seri üretimin/serilemeden kaçınmaktır. –

+2

@Christophe Serileştirme işleminden kaçınamazsınız, çünkü gerekli olan "nesne" Memcached sunucusuna iletilebilir. Nesne grafiğinin, düz bayt odaklı bir veri akışına dönüştürülmesi gerekir. Bu işlemi daha verimli hale getirmeniz gerekiyorsa, .Net'in ikili serileştirme işleminden daha hızlı ve daha az bant genişliği olan protobuf.net'i kullanıyorum.XmlDocument ile ikili diziselleştirilemediğinden hala sorun yaşamaya devam edersiniz. Kendi sınıfınızı oluşturun ve protobuf.net'in yönergelerini izleyin. –

+0

@Christophe Protobuf.net: http://code.google.com/p/protobuf-net/. –

İlgili konular