AS3 字符串内存泄漏

2024-03-04

我已经在 AS3 中编程了一段时间,发现一个非常奇怪的问题,字符串没有明显的原因挂在内存上,下面的程序只是用随机字符串更改 label.text 属性,它工作正常,但是当我查看 Flex 探查器,我注意到字符串的数量正在稳步增加,我尝试执行垃圾收集器,但没有帮助我。

这是内存泄漏吗?我该如何解决它?

据我所知,该字符串应该由垃圾收集器收集,因为没有对象引用它们,但并非所有字符串都发生这种情况。

下面是 Flex 分析器的代码和屏幕截图,显示了 String 实例的数量。

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="windowedapplication1_creationCompleteHandler(event)">
<s:layout>
    <s:BasicLayout/>
</s:layout>
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        protected var t:Timer=new Timer(10);

        protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
        {
            t.addEventListener(TimerEvent.TIMER,listener,false,0,true);
            t.start();
        }

        protected function listener(e:Event):void
        {
            var s:String=Math.random()+"-->";
            this.fx(s);
            s=null;
        }

        protected function fx(s:String):void
        {
            this.label.text=s;
        }
    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Label id="label" y="39" left="10" right="10" text="Label"/>
</s:WindowedApplication>

抱歉,不到 10 分,这是分析器屏幕截图http://imageshack.us/a/img11/9716/stackw.png http://imageshack.us/a/img11/9716/stackw.png

SOLVED

Baris 和 Loxxy 你是对的,我做了一些更改以隔离问题,它增长到约 30Mb,然后垃圾收集器释放一些内存,它永远不会回到约 2mb(起点),但图表开始从~20mb 到 ~30mb 一遍又一遍。

这是测试这个的代码

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="windowedapplication1_creationCompleteHandler(event)">
<s:layout>
    <s:BasicLayout/>
</s:layout>
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;
        protected var maxMemoryUsage:Number=0;
        protected var i:Number=0;

        protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
        {
            setTimeout(Fx,20);
        }

        protected function Fx():void
        {
            if(i++%1024==0) 
            {
                var mem:Number=System.totalMemory;
                this.maxMemoryUsage = mem>this.maxMemoryUsage?mem:this.maxMemoryUsage;
                trace(this.maxMemoryUsage + ' / ' + mem);
            }

            var s:String="";
            s+=Math.random().toString()+"qwertyuiu...1024 random chars...iiwqe";
            this.aSimpleString=s;
            setTimeout(Fx,20);
        }
    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <fx:String id="aSimpleString"/>
</fx:Declarations>
</s:WindowedApplication>

调用 System.gc() 也没有执行任何操作,也许 gc 需要一些暂停才能运行。


垃圾收集器将在需要时运行。通常它会发生在分配新对象时,但如果内存使用率不高,则在您的情况下可能不会发生。

您可以尝试拨打电话System.gc()看看它是否释放了这些字符串。但您不应该在生产代码中使用它。

See this https://stackoverflow.com/a/192418/583363回答以获取更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AS3 字符串内存泄漏 的相关文章

  • Java HashMap 与 ArrayList 相比的内存开销

    我想知道java HashMap与ArrayList相比的内存开销是多少 Update 我想提高搜索一大包 600 万以上 相同对象的特定值的速度 因此 我正在考虑使用一个或多个HashMap来代替ArrayList 但我想知道 HashM
  • SQLite 参数 - 不允许表名作为参数

    我正在通过 Flex 在 AIR 中开发一个应用程序 但我没有发现 SQLite 出了什么问题 我习惯了 MySQL 参数有效 但仅在某些情况下有效 这是内置的针对sql注入的卫生系统的一部分吗 谢谢你的帮助 Works sqlite IN
  • 动态分配对象数组

    我有一个包含动态分配数组的类 例如 class A int myArray A myArray 0 A int size myArray new int size A Note that as per MikeB s helpful sty
  • Flex - 自动调整数据网格大小的问题

    我正在尝试创建一个数据网格 它将垂直调整大小以确保所有渲染器完整显示 此外 渲染器的高度可变 渲染器可以自行调整大小 一般来说 事件的流程如下 项目渲染器之一会自行调整大小 通常响应用户单击等 它调度父数据网格拾取的冒泡事件 DataGri
  • C++ 构造函数抛出异常时销毁对象的成员变量

    这个问题是基于 Scott Meyers 在他的书 更有效的 C 中提供的一个例子 考虑下面的类 A class to represent the profile of a user in a dating site for animal
  • .net中连续内存存储的误解?

    http msdn microsoft com en us library ms379570 v vs 80 aspx http msdn microsoft com en us library ms379570 v vs 80 aspx
  • laravel 基本查询中“允许的内存大小已耗尽 134217728 字节”

    我不知道为什么我无法让以下工作正常工作 DB table twitter hashtags gt paginate 5 每次我得到 第二个数字往往不同 Allowed memory size of 134217728 bytes exhau
  • 如何研究.NET 中的非托管内存泄漏?

    我有一个通过 MSMQ 运行的 WCF 服务 内存随着时间的推移逐渐增加 表明存在某种内存泄漏 我在本地运行该服务并使用 PerfMon 监视一些计数器 CLR 内存托管堆字节总数保持相对恒定 而进程的私有字节随着时间的推移而增加 这让我相
  • 如何在 Windows 7 中模拟内存不足的情况

    我有一个用 C 编写的应用程序 运行良好 但有时在现场会出现错误 我们认为这些错误是由于内存不足或与垃圾收集器的交互造成的 如果有人感兴趣 这里有描述 无法将 NHibernate Impl ExpandedQueryExpression
  • 页面错误陷阱的成本

    我有一个应用程序 它定期 每 1 或 2 秒后 通过分叉自身来获取检查点 因此 检查点是原始进程的一个分支 它一直保持空闲状态 直到原始进程发生某些错误时被要求启动 现在我的问题是fork的写时复制机制的成本有多大 每当原始进程写入内存页面
  • 从 Air Native 扩展返回结构

    是否可以从本机代码返回结构 返回 int 或 boolean 相对简单 但是如何将更复杂的结构返回给动作脚本 您可以返回任何可以在本机代码中表示为 FREObject 的对象 这实际上包括任何 Actionscript 类或 Actions
  • 一旦组件被销毁,在 initComponent 函数中创建的存储是否会发生内存泄漏,或者这些存储是否会被垃圾收集?

    这是从另一个问题中衍生出来的一个问题 在 ExtJS 4 中具有相同视图并多次存储的最佳实践 https stackoverflow com questions 27333787 best practice to have the same
  • 静态方法是否会立即编译(JIT)?

    根据我的理解 CLR 编译器对实例方法和静态方法的处理方式相同 并且每当首次调用该方法时 IL 代码都会进行 JIT 编译 今天我和同事讨论了 他告诉我静态方法与实例方法的处理方式不同 即 静态方法在程序集加载到应用程序域后立即进行 JIT
  • html 表单发布到 Flex 应用程序

    我有一个基本完成的 Flex 应用程序 它使用 Zend AMF 来连接 提供数据 我的应用程序确实有一个登录屏幕 看起来工作正常 现在我想在我的网站上添加另一个登录表单 允 许用户输入用户名 密码 提交表单时应将数据传递给 Flex 应用
  • Random.Next() 的 Actionscript 3 实现

    我想知道 AS 3 中是否有很好的 Random Next 实现 基本上想要生成一系列给定种子的随机数 有时 最小和最大限制 类似于 C System Random 类 Random random new Random return ran
  • 正确地将 flash.utils.Dictionary 序列化为 SharedObject

    我的 Flex 项目中有一个名为 HashMap 的便利集合类 它本质上是 flash utils Dictionary 的包装器 带有一堆便利方法和添加的 同步的 ArrayCollection 以便我可以将 HashMap 传递给需要的
  • 设置 MetaspaceSize 的指南 - java 8

    64 位服务器的 MetaspaceSize 默认值是多少 我在官方文档中没有找到它 我观察到 在服务器 JVM 进程中 GC 频率有时会变高并持续增长 如果我重新启动服务几次 它就会恢复稳定 我认为这是由于 JRE 升级造成的 JVM 堆
  • 如何释放字符串未使用的容量

    我正在程序中处理很多字符串 这些字符串数据在读入我的程序后的整个生命周期内都不会改变 但由于 C 字符串保留了容量 因此浪费了大量肯定不会被使用的空间 我尝试释放这些空间 但没有成功 以下是我尝试过的简单代码 string temp 123
  • 为什么最后一个关闭的 MDI 子窗体没有被垃圾回收?

    我们的应用程序中存在内存泄漏问题 我已成功通过以下简单示例复制了其中一个问题 复制设置 1 创建以下辅助类 用于跟踪对象创建 销毁 public class TestObject public static int Count get se
  • 在 C# 中加密并在 Flex 中解密

    我需要解密 Flex 中的一些数据 这些数据是用 C 加密并写入文件的 为了简单起见 我选择使用 as3crypto As3 库和 Bruce Schneier C 库 AS3 as3加密链接 http code google com p

随机推荐

  • 在开发过程中我应该如何将 Perl 警告升级为致命错误?

    当运行应用程序测试套件时 我想将所有 Perl 编译和运行时警告 例如 未初始化的变量 警告 升级为致命错误 以便我和其他开发人员调查并修复生成警告的代码 但我只想在开发和 CI 测试期间这样做 在生产中 警告应该只是警告 我尝试了以下操作
  • homestead.rb:109:in `read': 没有这样的文件或目录@ rb_sysopen

    我尝试通过官网的文档5 3使用homesteadhttps laravel com docs 5 3 homestead https laravel com docs 5 3 homestead但它不起作用 详细信息如下 C Users l
  • Cypress.io 中选择器的存储位置

    我是赛普拉斯的新手 避免将选择器 定位器硬编码到每个规范中的最佳方法是什么 在其他框架中 我们将创建一个包含所有选择器的配置文件 并让规范引用它 场景 我可能有一个在多个规范中使用的选择器 如果选择器发生变化 我不想在每个规范中更改它 我宁
  • 添加到多个 std 容器时 C++ 中的异常安全

    我有一些代码添加到std vector and a std map创建对象后 v push back object std vector m object gt id object std map 我想让这个有一个强有力的例外保证 通常 为
  • 与php中的另一个数组合并后如何从数组中删除重复元素?

    我正在尝试编写程序来计算指定开始日期后的接下来 20 个日期 然后从 20 个日期中排除周末 Holidays Array holidays 2016 12 13 2016 12 24 以及结果数组 其中仅包含除周六和周日之外的工作日 在假
  • Keycloak,如果选择更新密码操作,则不返回访问令牌

    我正在打电话 auth realms master protocol openid connect token通过在正文中发送以下内容来获取访问令牌 grant type password client id example docker
  • 如何使用 JavaScript 在 Hackerrank 中发出 AJAX 请求?

    我打开 Hackerrank 示例测试并尝试使用可能用于进行 AJAX 调用的方法 XMLHttpReq fetch等等 它们都不起作用 XHR and fetch方法不可用 First fetch async function myFet
  • 维纳滤波

    我想编写一个维纳滤波器来改善图像 我不想使用傅立叶 我知道有一个基于中值和方差的算法 但我找不到它 你们能帮我吗 http en wikipedia org wiki Wiener filter http en wikipedia org
  • 如何为新样式表生成 CSS 变量值

    我正在开发一个项目 用户可以从颜色输入中选择颜色 并使用 CSS 变量动态创建自己的主题 我希望用户能够下载包含他们选择的值的整个 CSS 文件 My issue 下载的CSS文件不显示实际的颜色值 而是显示变量名称 NOT WANTED
  • Python:CGI在脚本退出前更新网页

    好吧 这是我的情况 我编写了一个带有文本区域的 HTML 表单 该文本区域向我的 python 脚本提交 POST 请求 我使用 cgi 库来解析文本区域并将其拆分为一个数组 然后 我使用循环处理这些项目并在处理时打印它们 看来 即使我将打
  • JavaScript 和 Java 有什么区别?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 JavaScript 和 Java 有什么区别 Java 和 Javascript 很相似 就
  • 使用operator[]时如何区分读/写操作

    我需要编写一个带有重载运算符 的类 当使用运算符 读取或写入数据时 该类具有不同的行为 为了给出我想要实现的目标的实际示例 假设我必须编写一个名为 PhoneBook 的类的实现 该类可以按以下方式使用 PhoneBook phoneBoo
  • Angular 2 路由器导航功能不起作用

    我的路由器功能 导航 有问题 在我的 AppComponent 中 RouteConfig path home name Home component HomeComponent useAsDefault true data user nu
  • 如何在 Visual Studio 2010 Express for Windows Phone 上安装便携式库工具

    我一直在尝试安装可移植库工具并使用 Visual Studio 2010 Express for Windows Phone 创建可移植类库 看起来它应该可以工作 因为 PCL 说它支持 Visual Studio Express 不幸的是
  • 期望脚本在单独调用时有效,但不能作为盐状态

    我正在尝试通过expect 进行scp 和ssh 操作 如果我直接从终端调用下面的脚本 则它可以工作 usr bin expect myexpect sh但是当我使用 salt 运行它时 第一个 scp 命令在第二个 ssh 失败的地方起作
  • Golang - 解析嵌套 JSON

    我正在使用上班族 https github com benmanns goworker处理请求作业 一个作业有一个有效负载 它有一个嵌套的 JSON 结构 如下所示 key a val a key b val b files key a a
  • PHP Web 应用程序构建系统 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想开始自动化更多的网络开发过程 所以我正在寻找一个构建系统 我主要在 Mac OS X 上编写 PHP 应用程序 并通过 FTP 部署 Lin
  • Bundler 通过 RVM 提供什么?

    我不确定这两个工具之间有什么区别 似乎有很大的重叠 但我一直在使用 RVM 并面临一些不兼容的问题 Bundler 做了哪些 RVM 没有做的事情 它们有不同的目的 RVM 创建一个沙箱来管理您的 Ruby 安装 作为其中的一部分 它还允许
  • 如何在源不存在的情况下显示默认图像

    我在 myasp net MVC Web 应用程序中有以下代码 a href Content uploads item ID png img class thumbnailimag src Content uploads item ID p
  • AS3 字符串内存泄漏

    我已经在 AS3 中编程了一段时间 发现一个非常奇怪的问题 字符串没有明显的原因挂在内存上 下面的程序只是用随机字符串更改 label text 属性 它工作正常 但是当我查看 Flex 探查器 我注意到字符串的数量正在稳步增加 我尝试执行