Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP General > Best way to call functions?

Reply
Thread Tools

Best way to call functions?

 
 
Jason Gates
Guest
Posts: n/a
 
      03-03-2004
Dear all

I have written a very complex web app for intranet use. It allows
users to search a large database and then returns formatted results. I
am currently employing a method as below:

1. Create a global database connection
2. Open a recordset that searches the database
3. Loop through recordset calling the relevant function from an
include file to display results
4. Loop until EOF or PageSize reached.
5. Close and destroy recordset
6. Close and destroy connection


Formatting function on include does the following:
1. Create a recordset and open the record passed into the function as
a primary key ID.
2. Display each field in a formatted fashion.
3. Close and destroy recordset.

Is this efficent? There is a lot of creation and destruction of
recordset objects (a typical search result may yield up to 400
records) - each time a result is returned in fact. Additionally the
database is queried twice for the same result. Once for the search
recordset and then again for the formatting function. This has got to
be slow and inefficient unless Microsoft have some clever thing that I
don't understand similar to connection pooling (although I appreciate
that this is only for ODBC connections to a database and nothing to do
with recordsets!)

I am aware that I could do this all inline in the main page - but the
formatting is employed at several different locations in the database.
What's worse is that the formatting function may call other formatting
functions to retrieve formatted data in other tables that work in a
similar fashion.

Whilst this makes my code very easy to read and re-useable I am
concerned that I am paying a very big penalty. Is there any way around
this?

Options I considered:
- Recordsets declared globally - always available for use. (Although
this won't work in many cases as lots of the functions are recursive)
- plus this is messy!
- Passing open recordsets by reference in the "right place" (on the
correct record) to the function for it to manipulate. Is this
efficient?
- As above but passing by value? Is this just as slow?
- Putting it all inline - will improve performance - but at the cost
of reusable code

Please advise - I'm pulling my hair out! Any changes will take me
several days to do (there's a lot of this code!) so I want to make
sure I get it right!!

Thanks in advance
Jason.
 
Reply With Quote
 
 
 
 
Vilmar Brazão de Oliveira
Guest
Posts: n/a
 
      03-03-2004
Hi Jason,
I read in a book and websites that is the best:
create objects and just after your use destroy them!
I believe that related to that I mentioned above, your application is fine.
About the rest, let the others say something.
bye,
--

««««««««»»»»»»»»»»»»»»
Vlmar Brazão de Oliveira
Desenvolvimento Web
HI-TEC


"Jason Gates" <> escreveu na mensagem
news: om...
> Dear all
>
> I have written a very complex web app for intranet use. It allows
> users to search a large database and then returns formatted results. I
> am currently employing a method as below:
>
> 1. Create a global database connection
> 2. Open a recordset that searches the database
> 3. Loop through recordset calling the relevant function from an
> include file to display results
> 4. Loop until EOF or PageSize reached.
> 5. Close and destroy recordset
> 6. Close and destroy connection
>
>
> Formatting function on include does the following:
> 1. Create a recordset and open the record passed into the function as
> a primary key ID.
> 2. Display each field in a formatted fashion.
> 3. Close and destroy recordset.
>
> Is this efficent? There is a lot of creation and destruction of
> recordset objects (a typical search result may yield up to 400
> records) - each time a result is returned in fact. Additionally the
> database is queried twice for the same result. Once for the search
> recordset and then again for the formatting function. This has got to
> be slow and inefficient unless Microsoft have some clever thing that I
> don't understand similar to connection pooling (although I appreciate
> that this is only for ODBC connections to a database and nothing to do
> with recordsets!)
>
> I am aware that I could do this all inline in the main page - but the
> formatting is employed at several different locations in the database.
> What's worse is that the formatting function may call other formatting
> functions to retrieve formatted data in other tables that work in a
> similar fashion.
>
> Whilst this makes my code very easy to read and re-useable I am
> concerned that I am paying a very big penalty. Is there any way around
> this?
>
> Options I considered:
> - Recordsets declared globally - always available for use. (Although
> this won't work in many cases as lots of the functions are recursive)
> - plus this is messy!
> - Passing open recordsets by reference in the "right place" (on the
> correct record) to the function for it to manipulate. Is this
> efficient?
> - As above but passing by value? Is this just as slow?
> - Putting it all inline - will improve performance - but at the cost
> of reusable code
>
> Please advise - I'm pulling my hair out! Any changes will take me
> several days to do (there's a lot of this code!) so I want to make
> sure I get it right!!
>
> Thanks in advance
> Jason.



 
Reply With Quote
 
 
 
 
Bob Barrows
Guest
Posts: n/a
 
      03-03-2004
Jason Gates wrote:
> Dear all
>
> I have written a very complex web app for intranet use. It allows
> users to search a large database and then returns formatted results. I
> am currently employing a method as below:
>
> 1. Create a global database connection


Ignore the following if you mean that you are opening a database connection
on each page.

************************************************** ********
Assuming you are storing this connection in Application, this is very bad.
ADO objects are not free-threaded, which means only one thread will be able
to use this connection object at a time. Connections should be opened late
and closed early in each page in which they are used.
http://www.aspfaq.com/2053

It is possible to use a batch file called makfre15.bat (located in
C:\Program Files\Common Files\System\ADO on my machine) to cause a registry
change to make the ADO objects free-threaded, allowing you to use them in
Application. However, if any applications on that machine are connecting to
Jet databases (Access), YOU MUST NOT DO THIS.
************************************************** ********


> 2. Open a recordset that searches the database
> 3. Loop through recordset calling the relevant function from an
> include file to display results
> 4. Loop until EOF or PageSize reached.


Here are some alternatives that may improve your performance:
http://www.aspfaq.com/show.asp?id=2120

> 5. Close and destroy recordset
> 6. Close and destroy connection


Excellent.

You may wish to consider using GetRows arrays to avoid all the recordset
looping - looping through recordsets is incredibly slow compared to looping
through arrays. Better yet, if possible, make use of GetString. Take a look
at this:
http://www.aspfaq.com/show.asp?id=2467

Bob Barrows


--
Microsoft MVP - ASP/ASP.NET
Please reply to the newsgroup. This email account is my spam trap so I
don't check it very often. If you must reply off-line, then remove the
"NO SPAM"


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Best way to call a class from code behind Pushpadant ASP .Net 1 07-06-2006 02:15 AM
way way way OT: MCNGP Announcement Neil MCSE 174 04-17-2006 05:55 PM
One-way call seem to still call the EndWebMethod kplkumar@gmail.com ASP .Net Web Services 1 01-18-2006 08:32 AM
AMD Opteron: 1-way, 2-way, ... Up to 8-way. John John Windows 64bit 12 12-27-2005 08:17 AM
Best way to convert a list into function call arguments? bwooster47@gmail.com Python 2 05-06-2005 04:16 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57