yeah, you're totally right... i originally was using the duplicate()
function, but it's been super buggy for me, it makes CF on Linux crash
EVERY time. :( and CF on Win98 occasionally. I think they're fixing it
in SP1.
Steve
Cameron Childress wrote:
>
> Steve... We've been using this technique for some time now. I see that you
> are traveling down same path now, so here are comments on what I've found by
> doing this so far...
>
> One mistake I made early on was code similar to this line from your code
> below:
>
> <cfset request.app=application.requestapp>
>
> I believe that this actually only creates a pointer to your application
> struct, so when you call something in 'request.app', it's still technically
> accessing data in your application scope, and could still lead to memory
> issues without a lock. You can solve the problem by doing this instead:
>
> <cfset request.app= Duplicate(application.requestapp)>
>
> Also, I am very concerned about the effect of this method on a site which
> stores a large amount of data in the application scope. You're basically
> making CF copy the entire scope on every page call. This could cause
> enormous performance problems on a large, heavy traffic site with alot of
> data kept in memory.
>
> I've done some rudimentary load testing with this technique, and haven't yet
> seen a serious issue with decreased performance, but as I've been adding
> more and more data into the application scope for a current project I've
> become more and more worried that the same test would yield different
> results a second time.
>
> I probably will hold off on the load testing for a bit longer till I get
> finished stuffing everything I need to into the application scope, but does
> anyone else have any comments for or against this?
>
> -Cameron
>
> --------------------
> Cameron Childress
> McRae Communications
> p. 770-460-7277 x.232
> f. 770-460-0963
>
> > -----Original Message-----
> > From: Steve Nelson [mailto:[EMAIL PROTECTED]]
> > Sent: Saturday, August 26, 2000 10:34 AM
> > To: Fusebox
> > Subject: No more need for cflock!!
> >
> >
> > I've just hit upon a technique that would mean we only ever need to use
> > cflock two times in a fusebox home application. This is for application
> > variables, session and server variables would need to do the same too i
> > imagine (personally i never use them)
> >
> > First I want to propose a new filename, qry_globals.cfm the point of the
> > file is to store application wide queries, it would sit in the root
> > directory of your home application. It would run queries from the
> > database upon booting up the server then store the variables into
> > memory. This massively reduces stress on the database, generally it's
> > an excellent technique. The problem has been with cflock. people
> > forget to use it and CF WILL blow up on you if you forget to use
> > CFLOCK. So I figured out a way to bypass all the cflock nonsense and
> > only require two cflocks in your entire application, which do very small
> > tasks.
> >
> > Check this code out. It's wicked cool (Hal let me know how I did on my
> > fusedocs, i'm just starting to get into them, and love 'em! :)
> >
> > <cfsetting enablecfoutputonly="yes">
> > <!--- qry_globals.cfm --->
> > <!---
> > || I start by doing a check to see if the variable
> > application.requestapp exists if this
> > || variable exists then I set request.app=application.requestapp and I
> > do not rerun any
> > || application wide queries. If this variable does not exist I rerun
> > all the queries
> > || and set application.requestapp=request.app
> > ||
> > || Then anytime I want one of these values I call it as:
> > request.app.queryname instead
> > || of application.queryname. By doing this I no longer need to use
> > cflock in anywhere
> > || other than this file.
> >
> > || [EMAIL PROTECTED]
> >
> > ||
> > -->
> > <-- request.app - this is a copy of an application variable called
> > application.requestapp
> > ++> application.requestapp - this is where all application wide queries
> > sit
> > +++
> > --->
> > <cfset request.maindsn="valuemusiclocal">
> > <cfapplication name="blbl"
> > applicationtimeout="#createtimespan(0,1,0,0)#">
> > <cflock name="#application.applicationname#" timeout="60"
> > type="readonly">
> > <cfif isdefined("application.requestapp")>
> > <cfset request.app=application.requestapp>
> > <cfset runrequest="no">
> > <cfelse>
> > <cfset runrequest="yes">
> > </cfif>
> > </cflock>
> > <cfif runrequest>
> > <cfset request.app=structnew()>
> > <cfquery name="request.app.getstates"
> > datasource="#request.maindsn#">
> > select * from states
> > where active=1
> > order by state_name
> > </cfquery>
> > <cfset request.app.state_rows=structnew()>
> > <cfloop query="request.app.getstates">
> > <cfset request.app.state_rows[state_id]=currentrow>
> > </cfloop>
> > <cflock name="#application.applicationname#" timeout="60"
> > type="exclusive">
> > <cfset application.requestapp=request.app>
> > </cflock>
> > </cfif>
> > <cfsetting enablecfoutputonly="no">
> >
> >
> >
> >
> >
> > <!--- dsp_address.cfm --->
> > <!---
> > || I'm demonstrating the use of a request.app variable, note that
> > || I do not need cflock, and I do not need to rerun the getstates query
> >
> > || [EMAIL PROTECTED]
> >
> > ||
> > -->
> > <--
> > ++> request.app.getstates - this is a query with all the states in it
> > +++
> > --->
> > <select name="state_id">
> > <cfoutput query="request.app.getstates">
> > <option value="#state_id#">#state_name#
> > </cfoutput>
> > </select>
> >
> >
> > Now that's a beautiful thing! eh?
> >
> > Steve
> > ------------------------------------------------------------------
> > ------------
> > To Unsubscribe visit
> http://www.houseoffusion.com/index.cfm?sidebar=lists&body=lists/fusebox or
> send a message to [EMAIL PROTECTED] with 'unsubscribe' in
> the body.
>
> ----------------------------------------------------------------------------
> --
> To Unsubscribe visit
> http://www.houseoffusion.com/index.cfm?sidebar=lists&body=lists/fusebox or
> send a message to [EMAIL PROTECTED] with 'unsubscribe' in
> the body.
>
> ------------------------------------------------------------------------------
> To Unsubscribe visit
>http://www.houseoffusion.com/index.cfm?sidebar=lists&body=lists/fusebox or send a
>message to [EMAIL PROTECTED] with 'unsubscribe' in the body.
------------------------------------------------------------------------------
To Unsubscribe visit
http://www.houseoffusion.com/index.cfm?sidebar=lists&body=lists/fusebox or send a
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.