I have resisted actually posting the code because it has been suggested to me
that the app should be looked at for a patent, and this calculation process
is at the heart of the idea.  So I have reduced the variables down to just
generic names so as not to give away my idea away.  I really liked your idea
of combining all of the conditionals to one line using && operators, but in
the end it was no faster.  Two minutes and forty seconds to complete.  I
believe this is because, in my code, I have placed the conditionals in an
order that is most likely to throw out a record quickly if it is not a good
comparator, whereas your idea forces all of the conditionals to HAVE to be
considered for EVERY record(at least I think that it does).  Here is a
simplified version of the code:

protected function recalculateHandler(event:Event):void
                        {
                                processingPU.removeEventListener("popUpOpened", 
recalculateHandler);
                                
                                var count:int = 0;
                                var average:Number = 0.0;
                                var someNumberl:Number = 0.0;
                                var lon1:Number;
                                var lon2:Number;
                                var lat1:Number;
                                var lat2:Number;
                                var dlon:Number;
                                var dlat:Number;
                                var a:Number;
                                var c:Number;
                                var d:Number;
                                var tempDist:Number = 
(distance.selectedIndex*.25)+.25;
                                var length:int = mainArrayCollection.length;
                                var tempArray:Array = new Array();
                                compArrayCollection = new ArrayCollection();
                                tempCompArray = new Array();
                                tempArray = speedArrayCollection.source;
                                
                                for (var i:int = 0; i < length; i++) {   /*  
Loop Through Each of the
Records*/
                                        if (tempArray[i].status == "Act") { /*  
Test to see if current record
status is ACTIVE */
                                                for (var j:int = 0; j < length; 
j++){  /*  Compare to Each of the
other Records*/
                                                        if (i != j) {   /*  
Make sure you are not comparing a record to itself
*/
                                                                if 
(tempArray[i].propOne == tempArray[j].propOne) { 
                                                                        if 
(tempArray[i].propTwo == tempArray[j].propTwo) {
                                                                                
if (tempArray[i].propThree == tempArray[j].propThree) { 
                                                                                
        if (Math.abs(tempArray[i].propFour - tempArray[j].propFour) <=
10) { 
                                                                                
                if (tempArray[i].propFive == tempArray[j].propFive) { 
                                                                                
                        if (Math.abs(tempArray[i].propSix - 
tempArray[j].propSix) <= 1)
{ 
                                                                                
                                if (Math.abs(tempArray[i].propSeven - 
tempArray[j].propSeven)
<= 1) { 
                                                                                
                                        if (Math.abs(((tempArray[i].propEight -
tempArray[j].propEight)/tempArray[i].propEight))<0.10) {
                                                                                
                                                lon1 = 
tempArray[i].longitude*Math.PI/180;
                                                                                
                                                lon2 = 
tempArray[j].longitude*Math.PI/180;
                                                                                
                                                lat1 = 
tempArray[i].latitude*Math.PI/180;
                                                                                
                                                lat2 = 
tempArray[j].latitude*Math.PI/180;
                                                                                
                                                dlon = lon2 - lon1;
                                                                                
                                                dlat = lat2 - lat1;
                                                                                
                                                a = Math.pow(Math.sin(dlat/2), 
2) +
(Math.cos(lat1)*Math.cos(lat2)*Math.pow(Math.sin(dlon/2), 2));
                                                                                
                                                c = 2*Math.atan2(Math.sqrt(a), 
Math.sqrt(1-a));
                                                                                
                                                d = 3961 * c;
                                                                                
                                                
                                                                                
                                                if (d <= tempDistance ) {
                                                                                
                                                        count = count + 1;
                                                                                
                                                        someProp = someProp + 
Number(tempArray[j].propEleven);
                                                                                
                                                        tempCompArray.push({" 
push about 26 properties from one
array to a comparison array, plus some new values});
                                                                                
                                                        tempArray[i].propTwelve 
= istrue;
                                                                                
                                                }
                                                                                
                                        }
                                                                                
                                }
                                                                                
                        }
                                                                                
                }
                                                                                
        }
                                                                                
}
                                                                        }
                                                                }
                                                        }                       
                        
                                                }
                                                
                                                if (count != 0) {               
                                                                        /*  
Populate data if there is actually
data to be updated */
                                                        average = 
someProp/Number(count);
                                                        
tempArray[i].propThirteen = count;
                                                        tempArray[i].Prop14 = 
average;
                                                        
                                                        if (average == 0.0) {
                                                                
tempArray[i].propFourteen = 0.0;
                                                        } else {
                                                                
tempArray[i].propFourteen = (Number(tempArray[i].propTen) -
average)/average *100.0;
                                                        }
                                                        
                                                        
tempArray[i].propFifteen = tempArray[i].propFourteen -
tempArray[i].propFifteen;
                                                }
                                                
                                                count = 0;
                                                average = 0.0;
                                                someNumber = 0.0;
                                        }
                                }
                                
                                PopUpManager.removePopUp(processingPU);
                                compArrayCollection.source = tempCompArray;
                                mainArrayCollection.source = tempArray;
                                
                     }



--
View this message in context: 
http://apache-flex-users.2333346.n4.nabble.com/Workers-and-Speed-tp13098p13192.html
Sent from the Apache Flex Users mailing list archive at Nabble.com.

Reply via email to