コード例 #1
0
ファイル: CachingCollector.cs プロジェクト: zfxsss/lucenenet
            public override void Collect(int doc)
            {
                if (CurDocs == null)
                {
                    // Cache was too large
                    CachedScorer.Score_Renamed = Scorer_Renamed.Score();
                    CachedScorer.Doc           = doc;
                    Other.Collect(doc);
                    return;
                }

                // Allocate a bigger array or abort caching
                if (Upto == CurDocs.Length)
                {
                    @base += Upto;

                    // Compute next array length - don't allocate too big arrays
                    int nextLength = 8 * CurDocs.Length;
                    if (nextLength > MAX_ARRAY_SIZE)
                    {
                        nextLength = MAX_ARRAY_SIZE;
                    }

                    if (@base + nextLength > MaxDocsToCache)
                    {
                        // try to allocate a smaller array
                        nextLength = MaxDocsToCache - @base;
                        if (nextLength <= 0)
                        {
                            // Too many docs to collect -- clear cache
                            CurDocs   = null;
                            CurScores = null;
                            CachedSegs.Clear();
                            CachedDocs.Clear();
                            CachedScores.Clear();
                            CachedScorer.Score_Renamed = Scorer_Renamed.Score();
                            CachedScorer.Doc           = doc;
                            Other.Collect(doc);
                            return;
                        }
                    }

                    CurDocs = new int[nextLength];
                    CachedDocs.Add(CurDocs);
                    CurScores = new float[nextLength];
                    CachedScores.Add(CurScores);
                    Upto = 0;
                }

                CurDocs[Upto] = doc;
                CachedScorer.Score_Renamed = CurScores[Upto] = Scorer_Renamed.Score();
                Upto++;
                CachedScorer.Doc = doc;
                Other.Collect(doc);
            }