Possible a good use of using an external COM object do to the work instead? Or a C++ DLL - or J2ee class?
-- Alex Kac, CEO/Developer Innovation in Personal and Business Information Management http://www.pocketinformant.com/ zoomzoom > From: Mike Tyranski <[EMAIL PROTECTED]> > Reply-To: [EMAIL PROTECTED] > Date: Wed, 24 Jul 2002 12:52:26 -0500 > To: Multiple recipients of list witango-talk <[EMAIL PROTECTED]> > Subject: Re: Witango-Talk: Is Witango slow at doing nasty math? > > Nathan, > > I've had to develop a couple of dealer locators in the past. After looking > again, I get similar times as you. Fortuanately in my case, the results > rarely > return more than 100 matches. A while back when I was doing some testing with > JTransit, these math operations seemed to be faster than Witango. > > Mike > > Nathan Hitchcock wrote: > >> 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 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 > > -- > Mike Tyranski > Lynch2 > p: 847.608.6900 > f: 847.608.9501 > http://www.lynch2.com > > > ________________________________________________________________________ > 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