我们正在开发一些内存密集型的Adobe Air Desktop应用程序,有时会在Windows中超过32位1.3 Gb限制,并被操作系统清除。遗憾的是,我们无法从Flex Builder中找到任何选项以导出到Windows 64位。
似乎从Adobe论坛上有更多人对此功能感兴趣,Adobe似乎尚未承诺实施它。
如果有人遇到同样的问题并希望得到支持,请在Adobe论坛上投票:https://bugbase.adobe.com/index.cfm?event=bug&id=3011846
或者,任何处理内存密集型Adobe Air Desktop应用程序的提示都非常受欢迎。
答案 0 :(得分:2)
AIR现在在Windows上支持64位,来自AIR 29: https://forums.adobe.com/thread/2452737 https://labs.adobe.com/downloads/air.html
它目前处于测试阶段,但我尝试了它,似乎显着提高了内存阈值。分配3GB +对我没有任何问题。
答案 1 :(得分:1)
也许有点晚了,但我在Mac上运行时没有遇到这个问题:)我们的应用程序曾经在操作系统开始交换大量文件之前就达到了7GB内存。
内存优化,例如处理BitmapData,异步加载数据(以允许垃圾回收)等可能会对您有所帮助。
答案 2 :(得分:1)
ActionScript在其内存管理方面存在潜在的设计缺陷。这取决于机器的不同。在Windows上它大概是1.25GB,而即使是32位操作系统也可以处理更多。特别容易受到Sound
,ByteArray
和FileStream
类的攻击,但在后台使用这些类的其他类也会受到影响。
我在处理大量文件(FileStream
)并操纵它们(ByteArray
)时了解到了这一点。但是,当达到内存限制时抛出的错误消息通常不会指向正确的错误源...在为FileStream
类编写包装器和自定义调试器以处理它所具有的所有奇怪之后(尝试0字节长度的文件,一个最喜欢的错误来源)我下载了4k行代码,但仍然无法控制所有案例。
我在几乎所有内存密集型AIR应用程序中偶然发现了这些错误,并最终决定退出ActionScript。至少从2009年开始,Adobe必须知道底层问题。还记得FP9打破unloadSound()
方法并且Adobe承诺在FP10中修复它吗?嗯,他们有点修复它,现在发生的次数会减少。但那是关于它的。他们没有完全解决潜在的问题。
因此,除非Adobe修复底层架构中的错误,否则64位版本的AIR将无法帮助您。他们在过去几年中处理ActionScript的方式,我不打赌他们这样做。
这个功能最终让我意识到正在发生的事情。运行它并逐步执行while
循环,观察res
之后res.length == 18
变量会发生什么。
public static function hexToString(hex:*, len:uint = 32):String
{
if (hex == null || isNaN(hex))
{
return "UNKNOWN TYPE";
}
var str:String = '';
var strIn:String = hex.toString(16).substr(-len).toUpperCase();
var char:uint = 0x00;
var charStr:String = '';
var res:String = '';
while (strIn.length < len)
{
strIn = '0'+strIn;
}
res = strIn;
while (res.length > 1)
{
charStr = '0x'+res.substr(0, 2);
char = parseInt(charStr, 16);
res = res.substr(2);
str += String.fromCharCode(char);
}
return str;
}
我将函数转换为PHP和JS以确认,PHP和JS都没有显示出错误的行为。
答案 3 :(得分:0)
我最近对此问题进行了调查,实际上似乎存在内存阈值(取决于平台,似乎特别是在操作系统上),之后AIR应用程序将无响应/崩溃。我在这里打开了一个Adobe错误:https://tracker.adobe.com/#/view/AIR-4198476。希望我们能尽快从Adobe获得更多信息。