For the record, I have actually seen the singleton connection pattern
applied to a relatively large project (around 2 man/year) which shall remain
nameless. When they finally got around making load testing, the response
time was upward 30 sec. after 3 or 4 concurrent users, and that was for
pages WITHOUT transactions. With transactions, it would simply not work for
more than one user. Needless to say, they fired that company (but not the
project manager, of course!!), and we came in to fix the mess. The final
decision was to replace the whole data access layer with something more
sensible (ie use pooling).

Sébastien

On 10/17/07, Smotritsky, Alex <[EMAIL PROTECTED]> wrote:
>
> The open and close methods of the connection object in ado.net usually
> take the connection from the connection pool on open and return it on
> close so you get connection pooling for free.
>
> -----Original Message-----
> From: Discussion of advanced .NET topics.
> [mailto:[EMAIL PROTECTED] On Behalf Of Mike Andrews
> Sent: Tuesday, October 16, 2007 2:34 PM
> To: [email protected]
> Subject: Re: [ADVANCED-DOTNET] Singleton and Database Connection
> challange
>
> This is not the place for a singleton and the singleton is not
> implemented
> correctly since it doesn't take into account any race conditions that
> might
> occur with a multi-threaded app such as asp.net.  Also you would not
> want to
> dispose of the connection in the singleton since that defeats the
> purpose of
> the singleton.
> The connection should be created and destroyed when needed and not kept
> live
> by using the singleton.
>
>
> On 10/16/07, Abhijit Gadkari <[EMAIL PROTECTED]> wrote:
> >
> > We are writing an ASP.NET application. We have used singleton for
> > instantiating a database connection as explained in the following code
> > sample.
> >
> >
> >
> > Design thought was to use only one instance of MyDb across all the
> pages
> > in
> > this web application. Is this a correct singleton implementation for
> > Asp.NETweb application for managing database connection? In fact, this
> > code got C -
> > or D in our internal code review. Don't know why? Any idea on how to
> > improve
> > this code to A level.
> >
> >
> >
> > public sealed class AppDbProvider : IDisposable
> >
> >    {
> >
> >        public static readonly AppDbProvider instance = new
> > AppDbProvider();
> >
> >
> >
> >        private readonly MyDb _d = new MyDb(ConfigurationManager
> > .ConnectionStrings["my_connection"].ConnectionString,
> >
> >                               ConfigurationManager.ConnectionStrings[
> > "my_connection"].ProviderName);
> >
> >
> >
> >        public MyDb GetDbConnection()
> >
> >        {
> >
> >            if (_d != null)
> >
> >                return _d;
> >
> >            else
> >
> >                throw new Exception("Problem with Database Connection
> in
> > AppDbProvider.");
> >
> >        }
> >
> >
> >
> >        #region IDisposable Members
> >
> >
> >
> >        public void Dispose()
> >
> >        {
> >
> >            if (_d != null)
> >
> >                _d.Dispose();
> >
> >
> >
> >                Dispose();
> >
> >
> >
> >        }
> >
> >
> >
> >        #endregion
> >
> >    }
> >
> >
> >
> > Now in code behind file, we have following code
> >
> >
> >
> >
> >
> > public partial class CreatePage
> >
> >    {
> >
> > private AmgDb _d;
> >
> >
> >
> > try
> >
> > {
> >
> >     _d = AppDbProvider.instance.GetDbConnection();
> >
> > }
> >
> > Catch (Exception exce)
> >
> > {
> >
> > Response.write(exce.message);
> >
> > }
> >
> >
> >
> >     }
> >
> >
> >
> > And in the end, in the page unload event we have following cleanup
> code
> >
> >
> >
> > protected void Page_Unload(object sender, EventArgs e)
> >
> >        {
> >
> >            if (_d != null)
> >
> >            {
> >
> >                _d = null;
> >
> >            }
> >
> >        }
> >
> > ===================================
> > This list is hosted by DevelopMentor(r)  http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> > http://discuss.develop.com
> >
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor(R)  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>



-- 
Sébastien
www.sebastienlorion.com

===================================
This list is hosted by DevelopMentor®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to