I suspect that its your use of Append.  Appending to a file means that
everytime the file has to be opened, seeked to the end, and the new value
appended.  This is pretty slow if you to it a bunch of times.  

I suggest creating the string in memory and then writing it out to file.  

Russ

> -----Original Message-----
> From: Rick Root [mailto:[EMAIL PROTECTED]
> Sent: Thursday, August 17, 2006 11:03 AM
> To: CF-Talk
> Subject: Performance problem
> 
> I have some code that dynamically generates CSV, TAB, and EXCEL (HTML
> tables) from a query, and it is running pretty slowly.  A lot slower
> than I'd like it to.  Essentially, I set a bunch of variables like
> START_PAGE, END_PAGE, START_ROW, END_ROW, START_FIELD, and END_FIELD
> that allow me to loop through the query and loop through the list of
> fields and output the data in the appropriate format.
> 
> I added some debugging code and generating 124 rows took 19 seconds.
> Generating 1416 rows took 309 seconds.  Which means if someone wants to
> generate a drop with 5,000 rows, it's gonna take a long freakin' time!
> 
> It seems like it shouldn't be that slow.  It's only writing every 100
> rows to disk (the 124 record file was 445KB).  And a couple of cflog
> statements indicate that the file write takes less than a second.
> 
> Here's the query loop that outputs the rows of data.
> 
> <cfloop query="resultSet">
>       <cfset fileOutput = fileOutput & START_ROW>
>       <cfloop list="#fields#" index="ThisColumn">
>               <cfset field = evaluate("resultSet.#ThisColumn#")>
>               <cfif field eq "" and format eq "EXCEL"><cfset
> field="&nbsp;"></cfif>
>               <cfset fileOutput = fileOutput & START_FIELD>
>               <cfif format eq "CSV">
>                       <cfset fileOutput = fileOutput & csvFormat(field)>
>               <cfelse>
>                       <cfset fileOutput = fileOutput & FIELD>
>               </cfif>
>       </cfloop>
>       <cfset fileOutput = fileOutput & END_ROW>
>       <cfif currentRow MOD 100 is 0>
>               <cflog text="writing file #now()#">
>               <cffile action="APPEND"
> file="#application.udf.ROOT_DIR#\tools\entityLookup3\drops\#filename#"
> output="#fileOutput#" addnewline="No">
>               <cflog text="done writing file  #now()#">
>               <cfset fileOutput = "">
>       </cfif>
> </cfloop>
> 
> I suspect that it's the Evaluate() that's running slowly.
> 
> Any ideas on how to speed this code up?
> 
> Thanks!
> 
> Rick
> 
> 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Introducing the Fusion Authority Quarterly Update. 80 pages of hard-hitting,
up-to-date ColdFusion information by your peers, delivered to your door four 
times a year.
http://www.fusionauthority.com/quarterly

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:250158
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4

Reply via email to