Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化保存到sqlite数据库?_Sql_Actionscript 3_Actionscript - Fatal编程技术网

优化保存到sqlite数据库?

优化保存到sqlite数据库?,sql,actionscript-3,actionscript,Sql,Actionscript 3,Actionscript,我有一个as3应用程序,它使用sqlite数据库来保存度量数据。众所周知,as3是单线程的,所以当我保存到这个db时,我正在播放的舞台视频会变得跳跃!我听说分批保存db数据可以加快此过程,因此我将其保存在循环中: for (var i:int=0; i < metricsObject.metricsComponentData.length; i++){ switch (metricsObject.metricsComponentData[i].mouseType) {

我有一个as3应用程序,它使用sqlite数据库来保存度量数据。众所周知,as3是单线程的,所以当我保存到这个db时,我正在播放的舞台视频会变得跳跃!我听说分批保存db数据可以加快此过程,因此我将其保存在循环中:

for (var i:int=0; i < metricsObject.metricsComponentData.length; i++){
    switch (metricsObject.metricsComponentData[i].mouseType) {
        case MetricsCollator.MOUSE_OVER:
            this._query_txt = "INSERT INTO " + this._tablePath[0] + " VALUES (null, " + this._sessionID + 
                                                                    ", " + metricsObject.metricsComponentData[i].timeStamp + 
                                                                    ", '" + metricsObject.metricsComponentData[i].component + "'" + ")";
                    break;
        case MetricsCollator.MOUSE_OUT:
            this._query_txt = "INSERT INTO " + this._tablePath[1] + " VALUES (null, " + this._sessionID + 
                                                                    ", " + metricsObject.metricsComponentData[i].timeStamp + 
                                                                    ", '" + metricsObject.metricsComponentData[i].component + "'" + ")";
                    break;
       } // end switch
    executeQuery(this._query_txt);
} // end loop
for(变量i:int=0;i
我已经研究过伪线程示例,但它们都需要一个sprite或stage实例,我在其中执行此代码的类不是一个display类,我真的不想将stage的实例传递到这个类中,看起来很脏!;-)


有人有什么想法吗?

大多数伪线程示例都使用显示对象和输入帧侦听器,但您也可以使用
计时器,或者如果您的应用程序有某种更新循环也可以使用

下面是一个使用
计时器的简单示例:

package {
    import flash.display.Sprite;
    import flash.events.TimerEvent;
    import flash.utils.Timer;

    public class PseudoThreadExample extends Sprite {

        private var _timer:Timer;

        public function PseudoThreadExample(){
            // create a timer that runs with a low interval
            // tweak this to fit your needs!
            _timer = new Timer(30, 0);
            _timer.addEventListener(TimerEvent.TIMER, handleTick);
        }

        public function startWorking():void {
            // put work to be done in list here
            // in your case that will probably mean making an array of SQL-
            // statements to run later
            _timer.start();
        }

        public function handleTick(event:TimerEvent):void {
            // pop a thing off the list and do it.
            // if list is empty, stop the timer
            _timer.stop();
        }
    }

}

另外,请确保您正在异步运行查询,否则,执行将停止,等待它们完成!那么我可以澄清一下吗?我是否需要从handleTick()调用startWorking()以按时间增量保存到数据库,然后在完成后停止计时器?因此,我需要将DB保存从循环中移除?为你的快速反应干杯。你从外面呼叫startWorking,handleTick会被计时器呼叫,直到你停止它。这使得“线程”对外透明,您可以像往常一样进行保存调用,并将其分散到各个时间段。我不太确定您在问什么,但视频解码总是在单独的线程上完成。