XslCompiledTransform类引起的"内存泄漏"问题
我们可以通过XslCompiledTransform类使用XSLT样式表转换XML数据,但我在项目中使用此类的时候发现有内存泄漏(Memory Leak)现象,长时间不能进行回收的内存最终导致内存溢出的异常(Exception: Out Of Memory, OOM)发生。
原来,XslCompiledTransform类使用CodeDom将XSL以及其中的脚本编译到.NET程序集中,并将其加载到当前的应用程序域(AppDomain),所以也就需要占用内存。如果每次进行XSL转换的时候都重新加载XSL以及脚本就会导致内存不断增加,直到发生内存溢出的错误。
解决的办法是我们用全局的Hashtable变量将其进行缓存,即可解决问题。
P.S:多次使用XSL转换的时候记得要通过XslCompiledTransform.TemporaryFiles.Delete()方法进行清除。
参考资料:
Resource Leak from XslCompiledTransform
发现博客园也有一篇相关的文章《您注意到XslCompiledTransform性能没有?》,里面推荐使用单件模式,这样会频繁进行加载和转换,因为加载方法不是线程安全的很可能引起错误,再者会生成很多临时问题。而根据XSL文件来决定缓存XslCompiledTransform类实例的个数将是最合适不过的方法。
其实这不是什么内存泄漏也不是什么性能问题,而是我们对于其处理机制的不了解。以后我们就知道内存增长先检查应用程序变量和会话变量,再者要看看有没有滥用XslCompiledTransform类了。
posted on 2008-12-22 20:34 Joseph Tsuei 阅读(1482) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述