示例#1
0
        /// <summary>
        /// 改变索引状态
        /// </summary>
        private void CheckIndexState()
        {
            log.Debug("Checking Index state...");
            int last  = _index.GetLastIndexedRecordNumber();
            int count = _archive.Count();

            if (last < count)
            {
                //重建索引
                log.Debug("Rebuilding index...");
                log.Debug("   last index count = " + last);
                log.Debug("   data items count = " + count);
                // check last index record and archive record
                //       rebuild index if needed
                for (int i = last; i < count; i++)
                {
                    bool deleted = false;
                    T    key     = _archive.GetKey(i, out deleted);
                    if (deleted == false)
                    {
                        _index.Set(key, i);
                    }
                    else
                    {
                        _index.RemoveKey(key);
                    }

                    if (i % 100000 == 0)
                    {
                        log.Debug("100,000 items re-indexed");
                    }
                }

                log.Debug("Rebuild index done.");
            }
        }