内存泄漏:XslCompiledTransform类引起的"内存泄漏"问题



我们可以通过XslCompiledTransform类使用XSLT样式表转换XML数据但我在项目中使用此类时候发现有内存泄漏(Memory Leak)现象长时间不能进行回收内存最终导致内存溢出异常(Exception: Out Of Memory, OOM)发生

原来XslCompiledTransform类使用CodeDom将XSL以及其中脚本编译到.NET集中并将其加载到当前应用域(AppDo)所以也就需要占用内存如果每次进行XSL转换时候都重新加载XSL以及脚本就会导致内存不断增加直到发生内存溢出

解决办法是我们用全局Hashtable变量将其进行缓存Cache即可解决问题

P.S:多次使用XSL转换时候记得要通过XslCompiledTransform.TemporaryFiles.Delete思路方法进行清除

参考资料:
Resource Leak from XslCompiledTransform

发现博客园也有篇相关文章您注意到XslCompiledTransform性能没有?里面推荐使用单件模式这样会频繁进行加载和转换加载思路方法不是线程安全很可能引起再者会生成很多临时问题而根据XSL文件来决定缓存CacheXslCompiledTransform类例子个数将是最合适不过思路方法

其实这不是什么内存泄漏也不是什么性能问题而是我们对于其处理机制不了解以后我们就知道内存增长先检查应用变量和会话变量再者要看看有没有滥用XslCompiledTransform类了
Tags:  vc内存泄漏 内存泄漏工具 java内存泄漏 内存泄漏

延伸阅读

最新评论

发表评论