<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="RSS_xslt_style.asp" version="1.0" ?>
<rss version="2.0" xmlns:WebWizForums="http://syndication.webwiz.co.uk/rss_namespace/">
 <channel>
  <title>DevForce Community Forum : Compressing Cache in Local Storage</title>
  <link>http://www.ideablade.com/forum/</link>
  <description>This is an XML content feed of; DevForce Community Forum : DevForce 2010 : Compressing Cache in Local Storage</description>
  <pubDate>Wed, 29 Jul 2026 19:31:19 -700</pubDate>
  <lastBuildDate>Mon, 11 Apr 2011 13:16:15 -700</lastBuildDate>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Web Wiz Forums 9.69</generator>
  <ttl>360</ttl>
  <WebWizForums:feedURL>www.ideablade.com/forum/RSS_post_feed.asp?TID=2615</WebWizForums:feedURL>
  <image>
   <title>DevForce Community Forum</title>
   <url>http://www.ideablade.com/forum/forum_images/IdeaBlade_logo_tm.png</url>
   <link>http://www.ideablade.com/forum/</link>
  </image>
  <item>
   <title>Compressing Cache in Local Storage : Hi dswersky;Actually, DevForce...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=2615&amp;PID=10437#10437</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=912" rel="nofollow">DenisK</a><br /><strong>Subject:</strong> 2615<br /><strong>Posted:</strong> 11-Apr-2011 at 1:16pm<br /><br />Hi dswersky;<div><br></div><div>Actually, DevForce already has a built-in class under IdeaBlade.Core.Ionic.Zlib.GZipStream to provide EntityCacheState compression capabilities.</div><div><br></div><div>Using this page,&nbsp;<a href="http://drc.ideablade.com/xwiki/bin/view/&#068;ocumentati&#111;n/code-sample-save-restore-chained-streams" target="_blank">http://drc.ideablade.com/xwiki/bin/view/Documentation/code-sample-save-restore-chained-streams</a>, as a guidance. I was able to modify the functions just a little bit so it uses IsolatedStorageFile for Silverlight.</div><div><br></div><div><table width="99%"><tr><td><pre class="BBcode"></div><div><br></div><div><div>&nbsp;&nbsp; &nbsp; &nbsp;public void SaveCompressedEncryptedFile(EntityManager em, byte&#091;&#093; key, string fileName) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;var provider = new AesManaged { Key = key, IV = key };</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName,&nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.IO.FileMode.Create, isf)) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;using (CryptoStream cs = new CryptoStream(isfs, provider.CreateEncryptor(), CryptoStreamMode.Write)) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;using (GZipStream gz = new GZipStream(cs, CompressionMode.Compress)) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;em.CacheStateManager.SaveCacheState(gz);</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; &nbsp; &nbsp;}</div></div><div><br></div><div></pre></td></tr></table></div><div><br></div><div><table width="99%"><tr><td><pre class="BBcode"></div><div><br></div><div><div>&nbsp;&nbsp; &nbsp; &nbsp;public void RestoreCompressedEncryptedFile(EntityManager em, byte&#091;&#093; key, string fileName) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;var provider = new AesManaged { Key = key, IV = key };</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName,</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.IO.FileMode.Open, isf)) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;using (CryptoStream cs = new CryptoStream(isfs, provider.CreateDecryptor(), CryptoStreamMode.Read)) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;using (GZipStream gz = new GZipStream(cs, CompressionMode.Decompress)) {</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;em.CacheStateManager.RestoreCacheState(gz, RestoreStrategy.Normal);</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp;&nbsp; &nbsp; &nbsp;}</div></div><div><br></div><div></pre></td></tr></table></div><div><br></div><div>Hope this helps.</div>]]>
   </description>
   <pubDate>Mon, 11 Apr 2011 13:16:15 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=2615&amp;PID=10437#10437</guid>
  </item> 
  <item>
   <title>Compressing Cache in Local Storage :   My application will be storing...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=2615&amp;PID=10419#10419</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=1105" rel="nofollow">dswersky</a><br /><strong>Subject:</strong> 2615<br /><strong>Posted:</strong> 08-Apr-2011 at 7:09am<br /><br />My application will be storing large amounts of cached data for performance and disconnected purposes.&nbsp; I have tried to use SharpZipLib to compress the cache files that are created, but I'm having some difficulty.<div>&nbsp;</div><div>I can get the file created, but it is invalid.&nbsp; Windows' built-in zip system and 7-zip both indicate that the file is invalid.&nbsp; When I attempt to open the file programmatically through SharpZipLib, I get the exception "Wrong Central Directory signature."&nbsp; I think part of the problem is that I'm creating the zip file directly from a MemoryStream, so there is no "root" directory in the archive.&nbsp; Not sure how to create one programmatically with SharpZipLib.</div><div>&nbsp;</div><div>Here's my code:</div><div><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"></font></font></font>&nbsp;</div><div><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">private</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">void</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> SaveCacheFile(</font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">string</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> FileName, </font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">EntityManager</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> em)</font></font></div><div><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>        {</p><p>            </p></font><p></p></font><p><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">using</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> (</font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">IsolatedStorageFile</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> isf = </font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">IsolatedStorageFile</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">.GetUserStoreForApplication())</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>            {</p><p>                </p></font><p></p></font><p><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">using</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> (</font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">IsolatedStorageFileStream</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> isfs = </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">IsolatedStorageFileStream</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">(FileName, System.IO.</font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">FileMode</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">.CreateNew, isf))</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                {</p><p>                    </p></font><p></p></font><p><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">MemoryStream</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> inStream = </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">MemoryStream</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">();</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    </p></font><p></p></font><p><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">MemoryStream</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> outStream = </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">MemoryStream</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">();</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    </p></font><p></p></font><p><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">Crc32</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> crc = </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">Crc32</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">();</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    em.CacheStateManager.SaveCacheState(inStream, </p></font><p></p></font><p><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">false</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">, </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">true</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">);</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    inStream.Position = 0;</p><p>                   </p><p>                    </p></font><p></p></font><p><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">ZipOutputStream</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> zipStream = </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">ZipOutputStream</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">(outStream);</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    zipStream.IsStreamOwner = </p></font><p></p></font><p><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">false</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">;</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    zipStream.SetLevel(3);</p><p>                    </p></font><p></p></font><p><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">ZipEntry</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> newEntry = </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">ZipEntry</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">(FileName);</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    </p></font><p></p></font><p><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">byte</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">&#091;&#093; buffer = </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">byte</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">&#091;inStream.Length&#093;;</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    inStream.Read(buffer, 0, buffer.Length);</p><p>                    newEntry.DateTime = </p></font><p></p></font><p><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">DateTime</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">.Now;</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    newEntry.Size = inStream.Length;</p><p>                    crc.Reset();</p><p>                    crc.Update(buffer);</p><p>                    newEntry.Crc = crc.Value;</p><p>                    zipStream.PutNextEntry(newEntry);</p><p>                    buffer = </p></font><p></p></font><p><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">null</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">;</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    outStream.Position = 0;</p><p>                    inStream.Position = 0;                   </p><p>                    </p></font><p></p></font><p><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">StreamUtils</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">.Copy(inStream, zipStream, </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">byte</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">&#091;4096&#093;);</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    zipStream.CloseEntry();</p><p>                    zipStream.Finish();</p><p>                    zipStream.Close();</p><p>                    outStream.Position = 0;</p><p>                    </p></font><p></p></font><p><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas"><font color="#2b91af" size="2" face="C&#111;nsolas">StreamUtils</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">.Copy(outStream, isfs, </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">new</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"> </font></font><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas"><font color="#0000ff" size="2" face="C&#111;nsolas">byte</font></font></font><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas">&#091;4096&#093;);</font></font></p><font size="2" face="C&#111;nsolas"><font size="2" face="C&#111;nsolas"><p>                    outStream.Close();    </p><p>                </p><p>                }</p><p>            }</p><p>        }</p></font></font></div>]]>
   </description>
   <pubDate>Fri, 08 Apr 2011 07:09:30 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=2615&amp;PID=10419#10419</guid>
  </item> 
 </channel>
</rss>