मेरे पास स्मृति में एक बड़ी वस्तु है जिसे मैं डेटाबेस में ब्लॉब के रूप में सहेजना चाहता हूं। मैं इसे सहेजने से पहले इसे संपीड़ित करना चाहता हूं क्योंकि डेटाबेस सर्वर आमतौर पर स्थानीय नहीं होता है। लेकिन जब मैं कुल कमांडर के साथ एक ही बाइट्स ज़िप इसे नीचे आकार हमेशा कम से कम 50% की कटौतीऑब्जेक्ट को क्रमबद्ध करने के लिए कैसे करें + इसे संपीड़ित करें और फिर तीसरे पक्ष की लाइब्रेरी के बिना deserialize decompressize?
using (var memoryStream = new MemoryStream())
{
using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress))
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(gZipStream, obj);
return memoryStream.ToArray();
}
}
:
यह है कि मैं क्या समय है। उपर्युक्त कोड के साथ यह 58 एमबी से 48 एमबी तक संपीड़ित होता है और 15 एमबी से छोटा कुछ भी बड़ा हो जाता है।
क्या मुझे किसी तृतीय-पक्ष ज़िप लाइब्रेरी का उपयोग करना चाहिए या .NET 3.5 में ऐसा करने का एक बेहतर तरीका है। मेरी समस्या के लिए कोई अन्य विकल्प?
संपादित करें:
बस के ऊपर एक कोड में एक बग मिला। एंजेलो आपके फिक्स के लिए धन्यवाद।
GZipStream संपीड़न अभी भी बहुत अच्छा नहीं है। मुझे टीसी 48% संपीड़न की तुलना में gZipStream द्वारा औसत 35% संपीड़न मिलता है।
मुझे पता नहीं बाइट्स की किस तरह मैं पिछले संस्करण :) के साथ बाहर हो रही थी है
EDIT2:
मैंने पाया है कि कैसे 47% 20% से संपीड़न में सुधार होगा। मुझे एक के बजाय दो मेमोरी स्ट्रीम का उपयोग करना पड़ा! क्या कोई यह समझा सकता है कि यह मामला क्यों है?
यहां 2 मेमोरी धाराओं वाला एक कोड है जो बहुत बेहतर संपीड़न करता है !!!
using (MemoryStream msCompressed = new MemoryStream())
using (GZipStream gZipStream = new GZipStream(msCompressed, CompressionMode.Compress))
using (MemoryStream msDecompressed = new MemoryStream())
{
new BinaryFormatter().Serialize(msDecompressed, obj);
byte[] byteArray = msDecompressed.ToArray();
gZipStream.Write(byteArray, 0, byteArray.Length);
gZipStream.Close();
return msCompressed.ToArray();
}
मैं http: //www.icsharpcode का उपयोग करता हूं।बड़ी सफलता के साथ नेट/opensource/sharpziplib/Download.aspx। – Asken