处理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内存“泄漏”相关推荐

  1. Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏

    Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏 报错日志 排查过程 泄漏原因 解决方案 最近维护一个项目,一个内存泄漏的的原因查了很久,这里记录 ...

  2. java xml内存泄漏_java - iText HTML到PDF的内存泄漏 - 堆栈内存溢出

    对于Maven项目:将以下依赖项添加到项目的pom.xml文件中: org.apache.poi poi-ooxml 3.14 com.itextpdf itextpdf 5.5.8 com.itex ...

  3. lottie动画_Lottie内存泄漏问题的定位与分析

    点击"搜狗测试"可关注我们! [一.前言Lottie简介与使用] 1.Lottie简介 Lottie是Airbnb开源的跨平台动画库,支持iOS.Android.React Nat ...

  4. 基于Android Studio的内存泄漏检测与解决全攻略

    自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...

  5. JS 内存泄漏与垃圾回收机制

    前言 不管什么程序语言,内存生命周期基本是一致的: 分配你所需要的内存 使用分配到的内存(读.写) 不需要时将其释放\归还 所有语言 第二部分都是明确的,第一和第三部分在 底层语言 中是明确的.但在像 ...

  6. 使用 Android Studio 检测内存泄漏与解决内存泄漏问题

    本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...

  7. android studio 解决内存泄漏

    自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...

  8. 基于Android Studio的Android内存泄漏检测方法

    自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...

  9. 关于Android应用程序内存泄漏 你需要知道的一切

    关于Android应用程序内存泄漏 你需要知道的一切 原文:https://blog.aritraroy.in/everything-you-need-to-know-about-memory-lea ...

最新文章

  1. 干掉 Postman?测试接口直接生成API文档,这个工具我爱了
  2. 微服务架构下的测试之道
  3. Spring源码分析之 lazy-init 实现原理
  4. c语言自定义函数程序设计,ch3自定义函数设计 C语言 《解析C程序设计》.ppt
  5. 3维旋转的3种表示方法之间的关系
  6. java虚拟机及加载class文件的原理机制
  7. Qt IFW基本用法
  8. 推送ActivityFeed到Teams
  9. 推荐系统相关算法(2):k-nearest neighbor
  10. 【转】语义化版本 2.0.0
  11. Git添加和克隆远程库
  12. 键盘按下某键 停止运行java_Java:按下“Q”键后终止while循环
  13. make *** 没有指明目标并且找不到 makefile。 停止。_“关系红利”时代《请停止无效社交》,关键朋友是你的价值选择...
  14. 腾讯会议发布3.0版本;微软将推出元宇宙产品;Firefox启动最大WebRTC升级|WebRTC风向
  15. 软件开发生命周期汇总
  16. 一文看懂,互联网这30年!
  17. Rasa课程、Rasa培训、Rasa面试系列之 Rasa幕后英雄系列-高级开发者 Rachael
  18. 2021年如何通过网络赚钱
  19. 【自动驾驶】Frenet坐标系与Cartesian坐标系(二)
  20. 7.3 习而学与CDIO,来自工程教育思想的启示——《逆袭大学》连载

热门文章

  1. PULSE:一种基于隐式空间的图像超分辨率算法
  2. 某程序员10个月时间做了30个私活单子,纯收入40万?
  3. 11门满分、10门99分、47门超95分……他却说自己是“学zha”
  4. 【嵌入式工程师面试高频问题】你知道IIC吗(附程序说明)
  5. 基础知识(七)opencv、python、人脸框检测
  6. 自动驾驶路径规划论文解析(6)
  7. excel有关计算机问题,Excel的相关解决方法
  8. python3迭代器和可迭代对象,Python3学习(8)--迭代,可迭代的和迭代器
  9. linux mtu日志,linux MTU调整
  10. c 语言 realloc 源码,C语言,realloc