入门第一式:
IndexReader.Open(Dir,readOnly);
当readOnly为true的时候效率最高,最好不要用Reader删除修改记录;
入门第二式:
reader.Reopen(readOnly);
优点:比第一式效率高,推荐使用;
缺点:前提是需要有Reader存在;
入门第三式:
writer.GetReader();
优点:NRL的实现,对实时性要求高的不二选择;
缺点:writer说它很痛苦,因为每次调用内部都会flush一次以保证所有index会被启用;
追求效率(中阶):
public
class
IndexReaderProxy
{
private
IndexReader _indexReader;
private
readonly
object
_indexReaderLock =
new
object
();
public
IndexReaderProxy(Directory directory,
bool
readOnly)
{
_indexReader = IndexReader.Open(directory, readOnly);
}
public
IndexReader GetCurrentIndexReader()
{
ReopenIndexReaderIfNotCurrent();
return
_indexReader;
}
private
void
ReopenIndexReaderIfNotCurrent()
{
if
(_indexReader.IsCurrent())
return
;
lock
(_indexReaderLock)
{
if
(_indexReader.IsCurrent())
return
;
var
newIndexReader = _indexReader.Reopen();
_indexReader.Close();
_indexReader = newIndexReader;
}
}
}
|
优点:效率和实时的一个平衡,在对实时要求不高的地方使用;
缺点:不属于NRL范畴,对实时性要求较高的地方就无法使用了;
本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2012/05/03/2481018.html,如需转载请自行联系原作者