>- see footer for list info -< Hi Simon, I'm sure the theory is correct, but when I altered my script t use your StringBuilder, it ran out of memory much quicker than ever before. Going back to my original version e.g.
xmlText = '' ..loop over query, building sub-xmlString.. xmlText &= subString resulted in a more efficient profile and no crash (prob thanks to my high-memory limit profile in the resin.cong file) But I'm interested to know why the stringbuilder approach resulted in an out-of-memory crash much quicker than before....? Rich 2009/12/6 Simon Baynes <[email protected]> > >- see footer for list info -< > > To be honest this something you should just get SQL server to do without > CFML. However, if you are definitely going down this path then there are a > few things you should know. In Java Strings are immutable this means that > you cannot change a string once it has been assigned. So if you do things > like:- > > <cfscript> > myString = "Simon"; > myString = myString & " Baynes"; > writeoutput(myString); > </cfscript> > > This doesn't actually update the variable but create a new variable in > memory that is the result of the second assignment. The old value will sit > in memory waiting to be Garbage Collected. I am sure you can now see that if > you are looping through a query doing loads of append statements then it's > going to create lots of information in memory. > > There is a Java class for this very type of operation called a > StringBuilder that manages this internally to reduce the memory usage. > > <cfscript> > oXml = createObject("java","java.lang.StringBuilder").init(); > oXml.append("Simon"); > oXml.append(" Baynes"); > writeoutput(oXml.toString()); > </cfscript> > > When using this for multiple append statements it'll save you lots of > memory! > > Having said that creating a 50Meg xml file will use at the very least 50Meg > of memory for that request which is not really what App Servers like Railo > or CF are for hence the advice of doing the whole job in SQL server. > > Hope that helps! > > Simon > Simon Baynes > www.simonbaynes.com > Free online storage you can access anywhere:- > http://www.simonbaynes.com/getsugarsync > LinkedIn profile:- http://www.linkedin.com/in/simonbaynes > > -----Original Message----- > From: Rich Wild <[email protected]> > Date: Sun, 6 Dec 2009 19:55:30 > To: Coldfusion Development<[email protected]> > Subject: [CF-Dev] Railo, Resin and large text variables = out of memory > > >- see footer for list info -< > Wotcha, > > I'm using Railo 3.1.2 + Resin 3.1 on an II6 Server. Its all been brill on > toast, thus far. > > Now, on this particular website, they have a requirement to build large XML > files produced from SQL Server databases. These XML files can be over 50Mb > in size. > > I'm running my SQL statements and building the XML using cfsavecontent > before saving out using cffile and zipping with cfzip. I figured producing > them as appended string variables as opposed to XML variables would save > time, processing and memory. > > However, I inconsistently get errors whilst building these files: > > Railo 3.1.2.001 Error (Java.lang.outofmemoryerror) - Java heap space > > Hmmm. That's not good. > > I tracked down the resin.conf file and changed > > <jvm-arg>-Xmx256m</jvm-arg> > to > <jvm-arg>-Xmx512m</jvm-arg> > > to try and increase the memory available. I still get the errors. > > Anyone have any clues how I can make this go away? I'm sure a comparable > CF8/9 server on the same hardware config machine wouldn't have this > problem. > They're not THAT big XML files. > > Cheers, > Rich > _______________________________________________ > > For details on ALL mailing lists and for joining or leaving lists, go to > http://list.cfdeveloper.co.uk/mailman/listinfo > > -- > CFDeveloper Sponsors:- > >- cfdeveloper Hosting provided by www.cfmxhosting.co.uk -< > >- Lists hosted by www.Gradwell.com -< > >- CFdeveloper is run by Russ Michaels, feel free to volunteer your help -< > > _______________________________________________ > > For details on ALL mailing lists and for joining or leaving lists, go to > http://list.cfdeveloper.co.uk/mailman/listinfo > > -- > CFDeveloper Sponsors:- > >- cfdeveloper Hosting provided by www.cfmxhosting.co.uk -< > >- Lists hosted by www.Gradwell.com -< > >- CFdeveloper is run by Russ Michaels, feel free to volunteer your help -< > _______________________________________________ For details on ALL mailing lists and for joining or leaving lists, go to http://list.cfdeveloper.co.uk/mailman/listinfo -- CFDeveloper Sponsors:- >- cfdeveloper Hosting provided by www.cfmxhosting.co.uk -< >- Lists hosted by www.Gradwell.com -< >- CFdeveloper is run by Russ Michaels, feel free to volunteer your help -<
