Flex字符串永远不会从内存中清除 - >它最终被清除

时间:2013-12-20 15:08:08

标签: json string flex memory memory-leaks

我有一段时间的这个奇怪的问题,并尝试解决它,以便在网上查找正确的解决方案,但我仍然无能为力。

当我使用flex profiler(4.6)检查我的应用程序的内存使用情况时,String的部分会不断增加并最终到达崩溃点。

我指出了应用程序的源代码中出现这种增加的原因。

这是我传递给Json.decode()的本地字符串变量。它从未清除过。 我从套接字服务器获取的json字符串的所有实例都保留在内存中,直到应用程序崩溃,即使分析器表示该字符串有0路径。

我不知道如何清除这些字符串。它只会不断增长。

请帮帮我。我一直在努力这一周。

感谢您提前获得任何支持。

我的源代码的一部分,我认为泄漏的来源如下。

        protected function evtserverReseved(event:ProgressEvent):void{

            var tmpArr:ByteArray = new ByteArray();
            var tempByteArray:ByteArray = new ByteArray();
            socEvtServer.readBytes(tmpArr, 0, socEvtServer.bytesAvailable);

            tempByteArray.writeBytes(leftOverMessageNotify, 0, leftOverMessageNotify.length);
            tempByteArray.writeBytes(tmpArr, 0, tmpArr.length);

            leftOverMessageNotify = new ByteArray();
            parseByteArray(tempByteArray);  
        }

        private function parseByteArray(rawArray:ByteArray):void{
            if(( rawArray[0] == 0x30 || rawArray[0] == 0x31 ) && rawArray[1] == 0x00 ){
                var log:String = "";
                for(var i:int=0; i<16; i++){
                    if(rawArray[i]==0){
                    }else{
                        log += rawArray[i]-48;
                    }
                }

                sizeOfFullListNotify = uint(log);
                commonFunction.printLog("Event Server eventNotify sizeOfFullListNotify=" + sizeOfFullListNotify);
                rawArray.position = 16;
            }

            var tempIdx:uint = rawArray.position;
            var tempLength:uint = rawArray.length;

            if(sizeOfFullListNotify <= tempLength - tempIdx){
                var tempArray:ByteArray = new ByteArray();
                var tempLeftOver:ByteArray = new ByteArray();
                var j:uint;
                for(j=0; j <sizeOfFullListNotify ; j++){
                    tempArray[j] = rawArray[j+tempIdx];
                }
                var euckrString:Object = tempArray.readMultiByte( tempArray.length,"euc-kr").replace("  ","").replace("\n","");

                //commonFunction.printLog("Total memory=" + flash.system.System.totalMemory +", Free memory=" + flash.system.System.freeMemory + ", Event Server eventNotify JSON 수신 data size=" +euckrString.toString().length+ ", body=" + euckrString.toString() );

                var ob:Object = com.adobe.serialization.json.JSON.decode(euckrString.toString());

                commonFunction.printLog("Total memory=" + flash.system.System.totalMemory +", Free memory=" + flash.system.System.freeMemory + ", Event Server eventNotify JSON data size=" +euckrString.length+ ", body=" + euckrString );

                if(ob.method != null){
                    //gridBox.DT_HOUSE.addItemAt(ob,0);
                    gridBox.DT_HOUSE.push(ob);

                    totlaReceivedList++;
                }else if(!(ob.result is String)){
                    //confirm for registerEventNotify
                    commonFunction.printLog("confirm for registerEventNotify");
                }                                       
                if(sizeOfFullListNotify < tempLength - tempIdx){
                    for(var k:uint=0; k <tempLength-tempIdx-sizeOfFullListNotify ; k++){
                        tempLeftOver[k] = rawArray[k+j+tempIdx];
                    }
                    parseByteArray(tempLeftOver);
                }else{
                    //leftOverMessageNotify = new ByteArray();
                }
            }else{  
                //leftOverMessageNotify = rawArray;
                for(var i:int = 0 ; i<rawArray.length ; i++){
                    leftOverMessageNotify[i] = rawArray[i];
                }
                rawArray = null;
            }
        }

var euckrString:Object(String)是从未从内存中清除的部分。 它一直堆叠直到崩溃。

0 个答案:

没有答案