You are indeed correct about the <@ADDROWS> tag being the culprit. Removing it resulted in a previous 12 second calc loop for 204 matches taking only 1 second! Apperently, Witango can do trigonomic math faster than the average 11th grader. :)
(Thanks also to Bob Shubert for pointing this flaw out in an off list email) So that begs a new question. What's the best way to add a column of distances to the existing array. My solution of creating a 2nd array was the easiest, buy obviously not the most processor efficient. I just played with creating a single column array with just the distances and adding it to the existing array with <@TRANSPOSE> and a single <@ADDROWS>, but while much faster, it still takes several seconds. You mention creating an array with null values... is there a way to edit the value of one column of a specified row of an array if I create the original "matches" array with and empty holder column for the distance values? Nathan Hitchcock -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On Behalf Of James Macfarlane Sent: Wednesday, July 24, 2002 11:23 AM To: Multiple recipients of list witango-talk Subject: RE: Witango-Talk: Is Witango slow at doing nasty math? - No, it's <@ADDROWS> Nathan, The problem is not the math, the problem is the <@ADDROWS> command. I built an application that did a lot of array manipulation and it kept timing out. I commented out bits of the code until I found the part that was slowing it down, and <@ADDROWS> was the culprit. I ended up having to build an array full of null data that was large enough for my needs. The program ran many times faster once I did this. There must be something very inefficient in the way <@ADDROWS> handles memory or something. - James. -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] On Behalf Of Nathan Hitchcock Sent: Wednesday, July 24, 2002 1:29 PM To: Multiple recipients of list witango-talk Subject: Witango-Talk: Is Witango slow at doing nasty math? Greetings, I've just finished a "dealer locator" app that provides a list of store addresses within X miles to given zip code. It's basically that "show me the closest locations to me" feature that every site seems to have now. While it was not the big of a deal to develop, I'm running into some performance issues, and they seem to revolve around Witango's ability to perform complex triginomic calculations. Here's the code that seems to be slowing it down: <@ROWS ARRAY="local$matches"> <@! define variables > <@ASSIGN NAME="lat2" SCOPE="local" VALUE='<@COL 2>'> <@ASSIGN NAME="long2" SCOPE="local" VALUE='<@COL 3>'> <@! calc distance in kilometers > <@ASSIGN NAME="x" SCOPE="local" VALUE='<@CALC EXPR="(sin(@@local$lat1 * @@local$pi / 180) * sin(@@local$lat2 * @@local$pi / 180) + cos(@@local$lat1 * @@local$pi / 180) * cos(@@local$lat2 * @@local$pi / 180) * cos(abs((@@local$long2 * @@local$pi / 180)-(@@local$long1 * @@local$pi / 180))))">'> <@ASSIGN NAME="x" SCOPE="local" VALUE='<@CALC EXPR="atan((sqrt(1-(@@local$x*@@local$x)))/@@local$x)">'> <@ASSIGN NAME="dist_km" SCOPE="local" VALUE='<@CALC EXPR="1.852 * 60.0 * ((@@local$x/@@local$pi)*180)">'> <@! convert distance to miles > <@ASSIGN NAME="dist_mi" SCOPE="local" VALUE='<@CALC EXPR="@@local$dist_km / 1.609344">'> <@! add row to array with distances > <@ASSIGN NAME="row_str" SCOPE="local" VALUE='<@COL 1>,<@COL 2>,<@COL 3>,@@local$dist_mi,<@OMIT STR="<@COL 4>" CHARS=",">,<@OMIT STR="<@COL 3>5>" CHARS=",">,<@OMIT STR="<@COL 6>" CHARS=",">,<@COL 7>,<@COL 8>'> <@ADDROWS ARRAY="local$matches2" VALUE="<@ARRAY ROWS='1' COLS='9' VALUE='@@local$row_str'>"> </@ROWS> The "matches" array is generated by finding all locations that fit within a pair of lattitude and logitude corrdinates that were calculated in a previous step. Basically, the user enteres a zip code and a desired distance from that zip code and it finds all addresses within that area, leaving you with the "matches" array. The code above then takes that array and determines the exact distance from the target zip code so it can sort the list accordingly. This array can contain anywhere from just a few addresses to thousands. Any thing under about 100 matches it can process in about 3 seconds or less. More than about 100, and the user is twiddling their thumbs in wait. Here's some times I've logged with the assistance of the <@TIMER> tag. MATCHES TIME(MS) 58 1166 79 2033 148 6950 206 12700 291 23617 320 28450 660 113733 Server Specs: Dual 500 PIII, 500 MB Ram, running Win NT 4.0 Does this seem like an excessivly long time to do this kind of math, or is it just me? Would I be better off writing this particular bit of code so that SQL does the math? ________________________________________________________________________ TO UNSUBSCRIBE: send a plain text/US ASCII email to [EMAIL PROTECTED] with unsubscribe witango-talk in the message body ________________________________________________________________________ TO UNSUBSCRIBE: send a plain text/US ASCII email to [EMAIL PROTECTED] with unsubscribe witango-talk in the message body ________________________________________________________________________ TO UNSUBSCRIBE: send a plain text/US ASCII email to [EMAIL PROTECTED] with unsubscribe witango-talk in the message body
