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

Reply via email to