如何修复XML内存“泄漏”
处理XML文件,可以很容易引起Flash内存“泄漏”。你的应用程序可能只保留XML文件内容的一小部分,但整个文件可能会留在内存中,从来没有垃圾回收。今天的文章中讨论这是如何发生的,以及如何清理所有未使用的内存。
这种特殊的内存“泄漏”源于一个奇特的行为,在Flash中构建其他字符串的字符串实际上并不拥有一份原始字符串的字符。相反,它们有一个“主字符串”字段引用原始字符串中的字符。在调试版本的Flash Player,你可以看到“主字符串”使用flash.sampler.getMasterString的内容。请看下面的例子:
1 var str:String = "ABCDEFGHIJKLMNOPQRSTUV".substr(0,2); 2 trace(str + " has master string " + flash.sampler.getMasterString(str)); 3 // output: AB has master string ABCDEFGHIJKLMNOPQRSTUV
“AB”构建后,即使你只使用“AB”字符串,Flash仍会在内存中持有整个“ABCDEFGHIJKLMNOPQRSTUV”字符串。虽然少数的英文字母没什么影响,但当你处理庞大的XML文件时,这个问题将难以控制。如果你做的是从XML中取一个字符串赋值给变量?事实证明,在这种情况下,整个XML文件会留在内存中。为了说明问题,这里有一个小例子:
1 var xml:XML = new XML( 2 '<people><person first="John"/><person first="Mary"/></people>' 3 ); 4 xmlJohn = xml.person[0].@first; 5 trace(xmlJohn + " has master string " + flash.sampler.getMasterString(xmlJohn)); 6 // output: John has master string <people><person first="John"/><person first="Mary"/></people>
JSON呢?同样的问题是否也有发生?幸运的是,它不会:
1 var json:Object = JSON.parse( 2 '{"people":[{"first":"John"},{"first":"Mary"}]}' 3 ); 4 jsonJohn = json.people[0].first; 5 trace(jsonJohn + " has master string " + flash.sampler.getMasterString(jsonJohn)); 6 // output: John has master string null
所以,你会如何清理XML文件里中的所有主字符串负担?为了解决这个问题,我创建了一个修改字符串的静态函数就能够使Flash Player清除主字符串。随意用在自己的项目中:
1 /** 2 * Replace a string's "master string"-- the string it was built from-- with a single 3 * character to save memory. 4 * @param str String to clean 5 * @return The input string, but with a master string only one character larger than it 6 * @author JacksonDunstan.com/articles/2260 7 */ 8 public static function cleanMasterString(str:String): String 9 { 10 return ("_"+str).substr(1); 11 }
字符串 用了这个函数后将被简化为“_John”.
最后,我创建了一个简单的示例程序,以测试XML,JSON字符串使用上述函数清理XML中的字符串。你需要一个调试版本的Flash Player来运行它,因为它使用flash.sampler.getMasterString。
原文链接: 如何修复XML内存“泄漏”
原文链接:http://jacksondunstan.com/articles/2260
转载于:https://www.cnblogs.com/atong/archive/2013/06/04/3116544.html
如何修复XML内存“泄漏”相关推荐
- Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏
Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏 报错日志 排查过程 泄漏原因 解决方案 最近维护一个项目,一个内存泄漏的的原因查了很久,这里记录 ...
- java xml内存泄漏_java - iText HTML到PDF的内存泄漏 - 堆栈内存溢出
对于Maven项目:将以下依赖项添加到项目的pom.xml文件中: org.apache.poi poi-ooxml 3.14 com.itextpdf itextpdf 5.5.8 com.itex ...
- lottie动画_Lottie内存泄漏问题的定位与分析
点击"搜狗测试"可关注我们! [一.前言Lottie简介与使用] 1.Lottie简介 Lottie是Airbnb开源的跨平台动画库,支持iOS.Android.React Nat ...
- 基于Android Studio的内存泄漏检测与解决全攻略
自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...
- JS 内存泄漏与垃圾回收机制
前言 不管什么程序语言,内存生命周期基本是一致的: 分配你所需要的内存 使用分配到的内存(读.写) 不需要时将其释放\归还 所有语言 第二部分都是明确的,第一和第三部分在 底层语言 中是明确的.但在像 ...
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...
- android studio 解决内存泄漏
自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...
- 基于Android Studio的Android内存泄漏检测方法
自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...
- 关于Android应用程序内存泄漏 你需要知道的一切
关于Android应用程序内存泄漏 你需要知道的一切 原文:https://blog.aritraroy.in/everything-you-need-to-know-about-memory-lea ...
最新文章
- 干掉 Postman?测试接口直接生成API文档,这个工具我爱了
- 微服务架构下的测试之道
- Spring源码分析之 lazy-init 实现原理
- c语言自定义函数程序设计,ch3自定义函数设计 C语言 《解析C程序设计》.ppt
- 3维旋转的3种表示方法之间的关系
- java虚拟机及加载class文件的原理机制
- Qt IFW基本用法
- 推送ActivityFeed到Teams
- 推荐系统相关算法(2):k-nearest neighbor
- 【转】语义化版本 2.0.0
- Git添加和克隆远程库
- 键盘按下某键 停止运行java_Java:按下“Q”键后终止while循环
- make *** 没有指明目标并且找不到 makefile。 停止。_“关系红利”时代《请停止无效社交》,关键朋友是你的价值选择...
- 腾讯会议发布3.0版本;微软将推出元宇宙产品;Firefox启动最大WebRTC升级|WebRTC风向
- 软件开发生命周期汇总
- 一文看懂,互联网这30年!
- Rasa课程、Rasa培训、Rasa面试系列之 Rasa幕后英雄系列-高级开发者 Rachael
- 2021年如何通过网络赚钱
- 【自动驾驶】Frenet坐标系与Cartesian坐标系(二)
- 7.3 习而学与CDIO,来自工程教育思想的启示——《逆袭大学》连载
热门文章
- PULSE:一种基于隐式空间的图像超分辨率算法
- 某程序员10个月时间做了30个私活单子,纯收入40万?
- 11门满分、10门99分、47门超95分……他却说自己是“学zha”
- 【嵌入式工程师面试高频问题】你知道IIC吗(附程序说明)
- 基础知识(七)opencv、python、人脸框检测
- 自动驾驶路径规划论文解析(6)
- excel有关计算机问题,Excel的相关解决方法
- python3迭代器和可迭代对象,Python3学习(8)--迭代,可迭代的和迭代器
- linux mtu日志,linux MTU调整
- c 语言 realloc 源码,C语言,realloc