入门第一式:
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,如需转载请自行联系原作者