jwcolby
jwcolby at colbyconsulting.com
Wed Jul 28 21:29:20 CDT 2010
Yep.
John W. Colby
www.ColbyConsulting.com
Michael Maddison wrote:
> Looks like a good candidate for adding to your base data access class.
>
> Cheers
>
> Michael M
>
> -----Original Message-----
> From: dba-vb-bounces at databaseadvisors.com
> [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of jwcolby
> Sent: Thursday, 29 July 2010 9:42 AM
> To: VBA
> Subject: [dba-VB] C# - Cleanup
>
> I have been reading up on the proper way to cleanup unmanaged code.
> Basically what this entails is inheriting CriticalFinalizerObject and
> IDisposable, and then adding stuff to the class. The finalizer is used
> to dispose of unmanaged ubjects "deterministically", IOW when I say to,
> not when the garbage collector decides to.
>
> This becomes an issue when you open a lot of connections. The garbage
> collector does not understand that the connections exist and so performs
> it's cleanup when it gets around to it.
>
> At least that is what I am understanding. Doing a massive rewrite to
> add this finalizer code to all my classes that use such code has dropped
> my errors DRASTICALLY!
>
> The code looks like this:
>
> #region Dispose
>
> ~clsSPAccuzipExportTo()
> {
> Dispose(true);
> }
> public void Close()
> {
> Dispose(true);
> // This object will be cleaned up by the Dispose method.
> // Therefore, you should call GC.SupressFinalize to
> // take this object off the finalization queue
> // and prevent finalization code for this object
> // from executing a second time.
> GC.SuppressFinalize(this);
> }
> // Implement IDisposable.
> // Do not make this method virtual.
> // A derived class should not be able to override this method.
> public void Dispose()
> {
> Dispose(true);
> // This object will be cleaned up by the Dispose method.
> // Therefore, you should call GC.SupressFinalize to
> // take this object off the finalization queue
> // and prevent finalization code for this object
> // from executing a second time.
> GC.SuppressFinalize(this);
> }
> // Dispose(bool disposing) executes in two distinct scenarios.
> // If disposing equals true, the method has been called
> directly
> // or indirectly by a user's code. Managed and unmanaged
> resources
> // can be disposed.
> // If disposing equals false, the method has been called by the
> // runtime from inside the finalizer and you should not
> reference
> // other objects. Only unmanaged resources can be disposed.
> private void Dispose(bool disposing)
> {
> // Check to see if Dispose has already been called.
> if (!this.disposed)
> {
> // If disposing equals true, dispose all managed
> // and unmanaged resources.
> if (disposing)
> {
> if (mCnn != null)
> {
> try
> {
> mCnn.Close();
> }
> catch (Exception)
> {
> }
> mCnn.Dispose();
> }
> }
>
> }
> disposed = true;
> }
> #endregion
>
>
> --
> John W. Colby
> www.ColbyConsulting.com
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
>
>
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
>
>