Мое приложение работает очень медленно - PullRequest
0 голосов
/ 19 марта 2010

Я разрабатываю приложение на основе сетки данных Advance. В этой сетке каждый столбец добавляется с помощью визуализации элементов, и я также добавил флажок во всех заголовках столбцов. В сетке я использовал поставщик данных xml. Я создаю XML как строку и приведу эту строку в XML. Когда я щелкаю по любой ячейке, это занимает 10-13 секунд, и в обработчике щелчков по ячейке я получаю значение System.totalMemory, равное 255205376.

Пожалуйста, предложите мне, что я буду делать.

Спасибо

Мой код для хранения XML

public function CreateDefaultXml(PojectionPeriod:int):XML{
            var xmlstring:String="<root>";

            xmlstring+="<row>" + 
                    "<Itemname>Item</Itemname>" + 
                    "<Unit>Unit</Unit>" + 
                    "<Cases>Cases</Cases>" + 
                    "<row>1</row>" ;

                for(var i:int=0;i<PojectionPeriod;i++){
                    xmlstring+="<projection_"+i.toString()+">";
                    xmlstring+="<projectionTxt/>";
                    xmlstring+="<growthValue/>";
                    xmlstring+="<projectionFormula/>";
                    xmlstring+="<constantgrowth/>";
                    xmlstring+="<growthWith/>";
                    xmlstring+="<timeProjection/>";
                    xmlstring+="<formula/>";
                    xmlstring+="<IsError/>";
                    xmlstring+="<Image>l</Image>";
                    xmlstring+="<DisplayprojectionTxt/>";
                    xmlstring+="<Style>" + 
                                    "<FontColor></FontColor>"+
                                    "<CellFill>0xffffff</CellFill>"+
                                "</Style>";
                    xmlstring+="<DecimalValue>0</DecimalValue>";
                    xmlstring+="</projection_"+i.toString()+">";
                }
                xmlstring+="<RowSelected>false</RowSelected>";
                xmlstring+="<ItemNameStyle>" + 
                        "<FontColor></FontColor>"+
                        "<CellFill></CellFill>" + 
                    "</ItemNameStyle>" +
                    "<UnitStyle>"  + 
                        "<FontColor></FontColor>"+
                        "<CellFill></CellFill>"  + 
                    "</UnitStyle>"
                    "<CasesStyle>" +
                        "<FontColor></FontColor>"+
                        "<CellFill></CellFill>" +
                    "</CasesStyle>" ;
                xmlstring+="</row>";

            var headerxmlString:String="";
            headerxmlString+="<header>" + 
                        "<Setting>" + 
                            "<Currency></Currency>" + 
                            "<Period></Period>" + 
                            "<NumberOfPeriod></NumberOfPeriod>" + 
                            "<StartPeriod></StartPeriod>" + 
                            "<PeriodFormat>" + 
                                "<Sequence></Sequence>" + 
                                "<Month></Month>" +
                                "<Year></Year>" +
                                "<Separators></Separators>" +
                                "<FontColor></FontColor>"+
                                "<CellFill>0xffffff</CellFill>"+
                            "</PeriodFormat>" + 
                            "<NumberFormat>" + 
                                "<Seperator></Seperator>" + 
                                "<Negative></Negative>" + 
                                "<HardCoded>" + 
                                    "<FontColor>0x000000</FontColor>"+
                                    "<CellFill>0xffffff</CellFill>"+ 
                                "</HardCoded>" + 
                                "<Calculated>" + 
                                    "<FontColor>0x000099</FontColor>"+
                                    "<CellFill>0xfffe83</CellFill>"+
                                "</Calculated>" + 
                                "<DecimalDigit>2</DecimalDigit>" + 
                            "</NumberFormat>" + 
                        "</Setting>"+
                        "<projectname/>";

            headerxmlString+="<headerColumn>";
            var headerArr:Array=new Array();
            for(var j:int=0;j<int(GlobalVariables.GlobalVariables.ProjectionPeriod)+3;j++){
                headerxmlString+="<column_"+i+">"
                    headerxmlString+=false
                headerxmlString+="</column_"+i+">"                  
            }
            headerxmlString+="</headerColumn>"
            headerxmlString+="</header>";
            GlobalVariables.GlobalVariables.HeaderXMLs=XML(headerxmlString);
            xmlstring+=headerxmlString;         
            xmlstring+="</root>";
            return XML(xmlstring);
        }

Ответы [ 2 ]

0 голосов
/ 22 марта 2010

Если вы устанавливаете свойство dataSource для своей функции CreateDefaultXML, Flex будет вызывать эту функцию при каждой сортировке данных, щелчке по ячейке или изменении размера окна приложения. Практически любое событие, которое влияет на AdvancedDataGrid или его содержимое, приведет к повторному вызову этой функции.

Может быть, лучше вызвать функцию CreateDefaultXML в обработчике событий creationComplete ваших компонентов и вывести значение в переменную Bindable. Затем пусть ваша AdvancedDataGrid использует переменную Bindable в качестве источника данных, чтобы вы не создавали ее снова и снова. (Конечно, при условии, что для вашего источника данных установлено значение CreateDefualtXML ().)

0 голосов
/ 20 марта 2010

Трудно сказать, где именно ваша проблема, не глядя на ваш код; но первым шагом является использование инструментов профилирования в Flex Builder, чтобы получить лучшее представление о том, где выделяется память и какие методы используют все это время.

Сколько «элементов» в вашей коллекции XML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...