随笔 - 204, 文章 - 36, 评论 - 508, 引用 - 20
数据加载中……

EnterPrise Library 2.0:慎用DataBackingStore缓存

继续我前几天的疑问。好不容易完成了自定义存储,和修改了原来的Cache类的存储,然后在测试NullBackingStore,IsolatedStorageBackingStore ,DataBackingStore ,CustomBackingStore的性能,加载一个20M的数据到Cache中,然后发现一个有意思义的现象。当我使用数据库缓存的时候,发现我内存直线上升。而且当数据缓存到数据库的时候,内存里的数据长时间没有进行垃圾回收(涉及到垃圾回收)。然后又回去测试NullBackingStore,结果一切正常。内存的使用率也就是上升了30M左右,反反复复测试了无数次。终于发现可能DataBackingStore 存在性能问题。在断点调试的时候,在Cacheing DataBase中。在LoadDataFromStore方法,加载数据使用DataSet,然后还有一个严重的地方在
string key = newItem.Key;
   byte[] valueBytes = SerializationUtility.ToBytes(newItem.Value);//TODO:这里又吃掉很大一部分内存,而且长期间释放不了。
   if (this.encryptionProvider != null)
   {
    valueBytes = this.encryptionProvider.Encrypt(valueBytes);
   }
原选我打算手工进行对valueBytes对象进行垃圾回收。就是获取valueBytes 对象的代龄,然后强制回收掉。但这样有一个结果就是:如果有其它对象跟valueBytes 对象在同一个代龄。当我强制回收肯定也会清空了其它对象。IsolatedStorageBackingStore 也存在相同的问题。没办法。最好的方法就是能有一个方法能够手工单单清除valueBytes ,不知道使用WeakReference.Target有没有效果?还没有测试过。

所以大家还是慎用DataBackingStore缓存。

posted on 2006-06-21 10:36 小春 阅读(244) 评论(2)  编辑 收藏 网摘 所属分类: EnterPrise Library

评论

#1楼    回复  引用    

牛X,缓存20m的数据.
本身这种做法,就有问题?
2006-06-21 11:37 | chill [未注册用户]

#2楼    回复  引用    

测试性能而已。难道你只测试加载几K,几M的数据?这样根本就体现不出性能
2006-06-21 12:43 | 春 [未注册用户]




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

相关文章:

相关链接: