Nick,

I'm comfortable implementing dispose / finalizer pattern myself to make
sure that the Lucene.NET IndexWriter is cleaned up.  However, I don't
understand why IndexWriter doesn't implement the dispose / finalizer
pattern itself?  Do you have an understanding of why this is?  Or
perhaps I should ask on the dev list?

Mostly I'm just curious.  My implementation seems to be working fine so
that is not an issue.

Thanks,

~ Justin



-----Original Message-----
From: Nicholas Paldino [.NET/C# MVP] [mailto:casper...@caspershouse.com]

Sent: Friday, June 01, 2012 3:09 PM
To: <lucene-net-user@lucene.apache.org>
Subject: Re: Implementing IDisposable / finalizer pattern to avoid index
lock issues

Brian,

The specific WCF case that you mention, yes there is specific cleanup
that is required that IDisposable doesn't cover.

However, this is the case wherever you need *any* specialized cleanup.
This is more a fault of those that extended ICommunicationObject from
IDisposable, not the other way around.

Long story short, unless you have *very* specialized situations around
cleanup which requires specialized logic on the client, IDisposable is
not the case.

Everything I've seen in Lucene.NET *doesn't* fall in this category and
is suitable for having IDisposable implementations.

Granted, it's not as easy as slapping on the IDisposable interface and
then having it call Close (note, a Close method with no return value and
no parameters is a good indication that IDisposable is applicable here),
the finalizers that *should* be implemented should *not* call
IDisposable on references they hold, but it's not rocket science either.

- Nick



On Jun 1, 2012, at 2:59 PM, "Brian Sayatovic"
<bsayato...@creditinfonet.com> wrote:

> Crap!  I went to look up the original information I read about the
using vs. try/finally and instead stumbled upon MSDN's own documentation
or it confirming your statement:
http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.90).aspx.
However, MSDN also documents, for example within their WCF pages, about
the risks of using "using" if you're not fully aware:
http://msdn.microsoft.com/en-us/library/aa355056.aspx.  There's also
supposed internal discussions:
http://social.msdn.microsoft.com/forums/en-US/wcf/thread/4cdc67e0-3069-4
d3b-b94f-27e2b8ff4429/. They're all around special clean-up scenarios
and situations where your cleanup itself might fail but not be obvious
in the syntax of the code.  Those are all more prevalent with WCF, I
suspect, than Lucene.NET.
> 
> 
> Brian Sayatovic
> Senior Software Architect
> 
> 866-218-1003 toll-free ext. 8936
> 937-235-8936 office
> 4540 Honeywell Ct. Dayton, OH 45424
> 
> 
> This message may contain confidential/proprietary information from the
CINgroup or its subsidiaries.
> If you are not an intended recipient, please refrain from the
disclosure, copying, distribution or use of this information. All such
unauthorized actions are strictly prohibited. If you have received this
transmission in error, please notify the sender by e-mail and delete all
copies of this material from any computer.
> 
> 
> -----Original Message-----
> From: Nicholas Paldino [.NET/C# MVP]
[mailto:casper...@caspershouse.com]
> 
> 1) That is not true, using ultimately compiles down to a try/finally.
It's always called no matter how the block is exited.
> 
> 2) This is a fault of the implementation.  It is up to the implementer
to create a finalizer that disposes of resources that don't implement
IDisposabe but need disposal (think raw handles).  Regardless,
try/finally doesn't improve the experience here; whatever method you use
to have the caller deterministically release resources won't do any good
if the finalizer isn't implemented correctly.  Implementing IDisposable
doesn't get you special consideration in the finalizer.
> 

************************************************************
This communication, including attachments, is for the exclusive use of 
addressee and may contain proprietary, confidential and/or privileged 
information.  If you are not the intended recipient, any use, copying, 
disclosure, dissemination or distribution is strictly prohibited.  If you are 
not the intended recipient, please notify the sender immediately by return 
e-mail, delete this communication and destroy all copies.
************************************************************

Reply via email to