This is an automated email from the ASF dual-hosted git repository. nightowl888 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 61bd53961e748ae032ad42ed90bb5bef67b05a98 Author: Shad Storhaug <[email protected]> AuthorDate: Fri Jul 24 09:03:26 2020 +0700 PERFORMANCE: Eliminated several calls to FirstOrDefault(), LastOrDefault(), Skip(), First(), and Last() (see #261) --- src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs | 3 +-- .../Language/Bm/PhoneticEngine.cs | 4 +--- .../Quality/Utils/DocNameExtractor.cs | 3 +-- src/Lucene.Net.Grouping/SearchGroup.cs | 5 ++--- src/Lucene.Net.QueryParser/Surround/Query/NotQuery.cs | 18 ++++++++++++------ src/Lucene.Net/Store/LockStressTest.cs | 3 +-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs b/src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs index 3dda7bb..cfd9a9a 100644 --- a/src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs +++ b/src/Lucene.Net.Analysis.Kuromoji/JapaneseTokenizer.cs @@ -10,7 +10,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; -using System.Linq; using System.Threading; using Console = Lucene.Net.Util.SystemConsole; @@ -379,7 +378,7 @@ namespace Lucene.Net.Analysis.Ja Parse(); } - Token token = pending.LastOrDefault(); + Token token = pending[pending.Count - 1]; // LUCENENET: The above loop ensures we don't get here unless we have at least 1 item if (token != null) { pending.Remove(token); diff --git a/src/Lucene.Net.Analysis.Phonetic/Language/Bm/PhoneticEngine.cs b/src/Lucene.Net.Analysis.Phonetic/Language/Bm/PhoneticEngine.cs index daae63b..2845a36 100644 --- a/src/Lucene.Net.Analysis.Phonetic/Language/Bm/PhoneticEngine.cs +++ b/src/Lucene.Net.Analysis.Phonetic/Language/Bm/PhoneticEngine.cs @@ -5,12 +5,10 @@ using Lucene.Net.Support; using Lucene.Net.Util; using System; using System.Collections.Generic; -using System.Linq; using System.Text; using System.Text.RegularExpressions; using JCG = J2N.Collections.Generic; - namespace Lucene.Net.Analysis.Phonetic.Language.Bm { /* @@ -483,7 +481,7 @@ namespace Lucene.Net.Analysis.Phonetic.Language.Bm { // not a multi-word name //input = words.iterator().next(); - input = words.FirstOrDefault(); + input = words[0]; } else { diff --git a/src/Lucene.Net.Benchmark/Quality/Utils/DocNameExtractor.cs b/src/Lucene.Net.Benchmark/Quality/Utils/DocNameExtractor.cs index a4aba7d..ee9bdec 100644 --- a/src/Lucene.Net.Benchmark/Quality/Utils/DocNameExtractor.cs +++ b/src/Lucene.Net.Benchmark/Quality/Utils/DocNameExtractor.cs @@ -3,7 +3,6 @@ using Lucene.Net.Search; using System; using System.Collections.Generic; using System.IO; -using System.Linq; namespace Lucene.Net.Benchmarks.Quality.Utils { @@ -52,7 +51,7 @@ namespace Lucene.Net.Benchmarks.Quality.Utils IList<string> name = new List<string>(); searcher.IndexReader.Document(docid, new StoredFieldVisitorAnonymousHelper(this, name)); - return name.FirstOrDefault(); + return name.Count > 0 ? name[0] : null; } private class StoredFieldVisitorAnonymousHelper : StoredFieldVisitor diff --git a/src/Lucene.Net.Grouping/SearchGroup.cs b/src/Lucene.Net.Grouping/SearchGroup.cs index 3e5c293..2f3a8aa 100644 --- a/src/Lucene.Net.Grouping/SearchGroup.cs +++ b/src/Lucene.Net.Grouping/SearchGroup.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; -using System.Reflection; using JCG = J2N.Collections.Generic; namespace Lucene.Net.Search.Grouping @@ -390,7 +389,7 @@ namespace Lucene.Net.Search.Grouping // Prune un-competitive groups: while (queue.Count > topN) { - MergedGroup<T> group = queue.Last(); + MergedGroup<T> group = queue.Max; queue.Remove(group); //System.out.println("PRUNE: " + group); group.IsInQueue = false; @@ -421,7 +420,7 @@ namespace Lucene.Net.Search.Grouping while (queue.Count != 0) { - MergedGroup<T> group = queue.First(); + MergedGroup<T> group = queue.Min; queue.Remove(group); group.IsProcessed = true; //System.out.println(" pop: shards=" + group.shards + " group=" + (group.groupValue == null ? "null" : (((BytesRef) group.groupValue).utf8ToString())) + " sortValues=" + Arrays.toString(group.topValues)); diff --git a/src/Lucene.Net.QueryParser/Surround/Query/NotQuery.cs b/src/Lucene.Net.QueryParser/Surround/Query/NotQuery.cs index 64a0633..13a8ba9 100644 --- a/src/Lucene.Net.QueryParser/Surround/Query/NotQuery.cs +++ b/src/Lucene.Net.QueryParser/Surround/Query/NotQuery.cs @@ -1,6 +1,5 @@ using Lucene.Net.Search; using System.Collections.Generic; -using System.Linq; namespace Lucene.Net.QueryParsers.Surround.Query { @@ -34,12 +33,19 @@ namespace Lucene.Net.QueryParsers.Surround.Query public override Search.Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) { var luceneSubQueries = MakeLuceneSubQueriesField(fieldName, qf); - BooleanQuery bq = new BooleanQuery(); - bq.Add(luceneSubQueries.FirstOrDefault(), Occur.MUST); + BooleanQuery bq = new BooleanQuery + { + { luceneSubQueries.Count > 0 ? luceneSubQueries[0] : null, Occur.MUST } + }; + + // LUCENENET: SubList() is slow, so we do an array copy operation instead + var luceneSubQueriesArray = new Search.Query[luceneSubQueries.Count - 1]; + for (int i = 1, j = 0; i < luceneSubQueries.Count; i++, j++) + luceneSubQueriesArray[j] = luceneSubQueries[i]; + SrndBooleanQuery.AddQueriesToBoolean(bq, - // FIXME: do not allow weights on prohibited subqueries. - //luceneSubQueries.subList(1, luceneSubQueries.size()), - luceneSubQueries.Skip(1).ToList(), + // FIXME: do not allow weights on prohibited subqueries. + luceneSubQueriesArray, // later subqueries: not required, prohibited Occur.MUST_NOT); return bq; diff --git a/src/Lucene.Net/Store/LockStressTest.cs b/src/Lucene.Net/Store/LockStressTest.cs index 3913d41..bcaf9d4 100644 --- a/src/Lucene.Net/Store/LockStressTest.cs +++ b/src/Lucene.Net/Store/LockStressTest.cs @@ -1,7 +1,6 @@ using System; using System.Globalization; using System.IO; -using System.Linq; using System.Net; using System.Net.Sockets; using System.Threading; @@ -78,7 +77,7 @@ namespace Lucene.Net.Store int count = Convert.ToInt32(args[arg++], CultureInfo.InvariantCulture); IPAddress[] addresses = Dns.GetHostAddressesAsync(verifierHost).Result; - IPAddress addr = addresses.FirstOrDefault(); + IPAddress addr = addresses.Length > 0 ? addresses[0] : null; Type c; try
