Hi Aaron,

Just before your loop closing tag, can you try adding <cfflush />.

I remember doing similar work dealing with a very large file and it was down to this issue, even though you may not be writing a great deal of output, with the amount of rows you mention, the whitespace characters inside that loop could still be adding up to a large amount, and the engine may be saving all this up thinking it will be rendering a page causing the memory issue with a buffer. cfflush will reset the buffer more frequently to stop it becomming full, that would be my initial thought for this.

Jamie MacDonald.

On 12/01/2012 19:20, Aaron J. White wrote:
Cfloop over a file doesn't put the file in memory. Just the current
line.

http://www.bennadel.com/blog/2011-Reading-In-File-Data-One-Line-At-A-Time-Using-ColdFusion-s-CFLoop-Tag-Or-Java-s-LineNumberReader.htm

On Jan 12, 1:13 pm, Alex Skinner<[email protected]>  wrote:
I think basically you don't want to hold the whole file in memory, there is
no reason to, try the code i provided and without outputting the line just
out put a counter e.g.
1
2
3
4
5
6
7
See if it barfs at the same line number

A

On 12 January 2012 19:09, Aaron J. White<[email protected]>  wrote:









midstring and split taken from cflib
http://www.cflib.org/udf/MidString
http://www.cflib.org/udf/split
On Jan 12, 1:03 pm, "Aaron J. White"<[email protected]>  wrote:
Not really.
         <cfset locals.startOfTitle = "<example_node>" />
         <cfset locals.endOfTitle = "</example_node>" />
         <cfloop index="locals.line" file="#locals.absFilePath#">
                 <cfif locals.line DOES NOT CONTAIN locals.endOfTitle>
                         <!--- add line to titleitem  --->
                         <cfset locals.titleItem&= locals.line />
                         <cfset application.import.lineCount += 1 />
                         <cfif application.import.stop>
                                 <cfabort />
                         </cfif>
                 <cfelse>
                         <cfset locals.titleItem&= locals.line />
                         <cfset application.import.lineCount += 1 />
                         <!--- we hit the end of a title. first get exta
chars from back.
we'll need those later--->
                         <cfset locals.tempArr =
application.utility.split(locals.titleItem,
locals.endOfTitle) />
                         <cfset locals.tempItem =
locals.tempArr[arraylen(locals.tempArr)]&
"" />
                         <!--- now get everything id middle of nodes --->
                         <cfset locals.titleItem = locals.startOfTitle&
application.utility.midstring(locals.titleItem, locals.startOfTitle,
locals.endOfTitle)&  locals.endOfTitle/>
                         <!--- convert title item to xml object--->
                         <cfset locals.titleXml =
xmlparse(locals.titleItem) />
                         <!--- we have our node. prepare titleItem text
for next iteration
--->
                         <cfset locals.titleItem = locals.tempItem/>
                         <cfif application.import.stop>
                                 <cfabort />
                         <cfelse>
                                 <!--- process the title xml and add
required info to the database
--->
                                 <cfset processTitleItem(locals.titleXml)
/>
                         </cfif>
                 </cfif>
         </cfloop>
On Jan 12, 12:43 pm, Alex Skinner<[email protected]>  wrote:
Seeing some code would be good how are you doing the read
I google and found something like this
<cfscript>
// Define the file to read, use forward slashes only
FileName="C:/Example/ReadMe.txt";
// Initilize Java File IO
FileIOClass=createObject("java","java.io.FileReader");
FileIO=FileIOClass.init(FileName);
LineIOClass=createObject("java","java.io.BufferedReader" );
LineIO=LineIOClass.init(FileIO);
</cfscript>
<CFSET EOF=0>
<CFLOOP condition="NOT EOF">
     <!--- Read in next line --->
     <CFSET CurrLine=LineIO.readLine()>
     <!--- If CurrLine is not defined, we have reached the end of file
--->
     <CFIF IsDefined("CurrLine") EQ "NO">
         <CFSET EOF=1>
         <CFBREAK>
     </CFIF>
     <CFOUTPUT>#CurrLine#<br></CFOUTPUT><CFFLUSH>
</CFLOOP>
Is your solution similar ?
A
On 12 January 2012 17:57, Aaron J. White<[email protected]>  wrote:
Hey all,
I am receiving an OutOfMemory error while running a script that is
trying to loop over a 1.2gb+ xml file (~ 12 million lines). I'm not
really sure if what I am doing is just horrible and there is a better
way or if it is a memory issue in openbd.
I have assigned tomcat 2gb max memory. While I'm running the script I
can see the memory usage slowly creep up in task manager. With 4gb of
ram on the vps I get to about 7 million lines before tomcat gives up.
When I had 3gb of ram on the server and 1gb applied to Tomcat I could
only get to about 4 million lines.
Here's the logic behind what I am doing.
I am interested in one particular node in the large file so I loop
over the file line by line. As I loop if the line does not contain
the
end of the node I'm looking for then I<cfset locals.exampleNode&=
locals.line />
Once I hit a line that contains the end of the node (</
example_node>  ). I do a few operations to clean up any extra text
from
the front and back of the node string and then convert it to xml with
xmlparse.
Once I have the node as xml I push it to another function that does
serveral things.
** uses xpath to grab particular information from the node. Seven
xpath searches are done on each node unless I decide to skip the node
after the first two xpath searches.
** Depending on the content I either add the information to my
database, update the information, or skip it. I have about 5 tables
that are getting modified from the script. A few of the unimportant
queries use background="yes".
The whole script runs in a cfthread so it doesn't time out.
Can anyone give any insight. Also, I could post some code example,
but
my script is about 600 lines long.
--
online documentation:http://openbd.org/manual/
   google+ hints/tips:https://plus.google.com/115990347459711259462
    http://groups.google.com/group/openbd?hl=en
     Join us @http://www.OpenCFsummit.org/Dallas, Feb 2012
--
Alex Skinner
Managing Director
Pixl8 Interactive
Tel: +448452600726
Email: [email protected]
Web: pixl8.co.uk
--
online documentation:http://openbd.org/manual/
   google+ hints/tips:https://plus.google.com/115990347459711259462
    http://groups.google.com/group/openbd?hl=en
     Join us @http://www.OpenCFsummit.org/Dallas, Feb 2012
--
Alex Skinner
Managing Director
Pixl8 Interactive

Tel: +448452600726
Email: [email protected]
Web: pixl8.co.uk


--
--
aw2.0
  http://www.aw20.co.uk/

--
online documentation: http://openbd.org/manual/
  google+ hints/tips: https://plus.google.com/115990347459711259462
    http://groups.google.com/group/openbd?hl=en

    Join us @ http://www.OpenCFsummit.org/ Dallas, Feb 2012

Reply via email to