我制作了一个flash应用程序,显示连接到mysql数据库的php脚本中的9行(配置文件信息,图像)。此应用程序每3秒刷新一次(因为它连接到数据库,需要刷新此脚本以查看任何更改而不刷新整个页面)
第一个问题是,如果我删除此代码,图像将立即显示但具有不同的尺寸(这是一个问题)。 如果我添加这部分代码,图像将以正确的尺寸显示,但它们会在3秒内出现(这是另一个问题)。
clipname.Main.addChild(thumb);
clipname.Main.width=200
clipname.Main.height=200
clipname.Main.x=clipname.Main.y=60
我想要的是必须立即显示图像并设置尺寸。
第二个问题是SetInterval()
正在泄漏一些记忆:(
这是我的完整代码:
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.sendToURL;
import flash.events.Event;
var req:URLRequest=new URLRequest("proyectos.php");
var loader:URLLoader = new URLLoader();
loader.dataFormat=URLLoaderDataFormat.VARIABLES;
loader.load(req);
loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
var myInterval = setInterval(loadedd, 3000);
setInterval(myInterval,0);
function loadedd() {
var req:URLRequest=new URLRequest("proyectos.php");
var loader:URLLoader = new URLLoader();
loader.dataFormat=URLLoaderDataFormat.VARIABLES;
loader.load(req);
loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
}
function loadCompleteHandler(e:Event):void {
var variable:URLVariables=new URLVariables(e.target.data);
for (var i:int = 0; i <= 8; i++){
var clipname=this["Menuuser"+i]
this["foto"+i]=String(variable.foto[i]);
this["Menuuser"+i].nombre.text=String(variable.nombre[i]);
this["Menuuser"+i].nick.text=String(variable.nick[i]);
this["Menuuser"+i].email.text=String(variable.email[i]);
this["Menuuser"+i].aparea.text=String(variable.aparea[i]);
this["Menuuser"+i].motivos.text=String(variable.motivos[i]);
this["Menuuser"+i].comentario.text=String(variable.comentario[i]);
this["Menuuser"+i].fecha.text=String(variable.fecha);
var thumb:Loader = new Loader();
thumb.load(new URLRequest(this["foto"+i]));
//Here is the problem, when i put this code the images will appear in 3 seconds(i dont want that. But if i remove that part the images will be shown instantly(good) but it will appear with different dimensions(here the problem)
clipname.Main.addChild(thumb);
clipname.Main.width=200
clipname.Main.height=200
clipname.Main.x=clipname.Main.y=60
}
}
答案 0 :(得分:0)
正如adobe所说:
不要使用setInterval()方法,而是考虑使用指定的时间间隔创建一个Timer对象,使用0作为repeatCount参数(将计时器设置为无限重复)。
如果要使用clearInterval()方法取消setInterval()调用,请确保将setInterval()调用分配给变量(clearInterval()函数稍后将引用该变量)。如果不调用clearInterval()函数来取消setInterval()调用,则不会对包含set timeout closure函数的对象进行垃圾回收。
我运行了一个版本的setInterval并没有发现内存泄漏(显然没有使用clearInterval()
)
private var interval:uint = setInterval( intervalTest, 3000 );
我的结果如下:
运行1总内存:3837952
运行2总内存:4427776
运行3总内存:4427776
继续没有内存泄漏。虽然我不确定您的代码是如何运行的,但这包含错误:
var myInterval = setInterval(loadedd, 3000);
setInterval(myInterval,0); //this line, setInterval params are function, delay,
//you are passing setInterval "myInterval" which is actually of type uint
我怀疑错误的代码是“泄密”的来源。
使用计时器的示例如下所示:
private var timer:Timer = new Timer( 3000, 0 );
timer.addEventListener( TimerEvent.TIMER, loadedd );
然后将loadded()定义更改为:
function loadedd( e:TimerEvent )
关于图像的问题,我不太确定。