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 1fa93124ee701ed41b699b9717a420061725ee76 Author: Shad Storhaug <[email protected]> AuthorDate: Sun Mar 14 16:35:20 2021 +0700 PERFORMANCE: Lucene.Net.Search.Suggest.Fst.FSTCompletion: Use Stack<T> rather than List<T>.Reverse(). Also, removed unnecessary lock in CheckExistingAndReorder(), as it is only used in a single thread at a time. --- src/Lucene.Net.Suggest/Suggest/Fst/FSTCompletion.cs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/Lucene.Net.Suggest/Suggest/Fst/FSTCompletion.cs b/src/Lucene.Net.Suggest/Suggest/Fst/FSTCompletion.cs index 6cdc8a9..441f8b0 100644 --- a/src/Lucene.Net.Suggest/Suggest/Fst/FSTCompletion.cs +++ b/src/Lucene.Net.Suggest/Suggest/Fst/FSTCompletion.cs @@ -100,9 +100,6 @@ namespace Lucene.Net.Search.Suggest.Fst /// <seealso cref="FSTCompletion(FST{object}, bool, bool)" /> private readonly bool higherWeightsFirst; - // LUCENENET SPECIFIC: We need some thread safety to execute atomic list operations - private readonly object syncLock = new object(); - /// <summary> /// Constructs an FSTCompletion, specifying higherWeightsFirst and exactFirst. </summary> /// <param name="automaton"> @@ -146,13 +143,14 @@ namespace Lucene.Net.Search.Suggest.Fst { try { - List<FST.Arc<object>> rootArcs = new List<FST.Arc<object>>(); + // LUCENENET specific: Using a stack rather than List, as we want the results in reverse + Stack<FST.Arc<object>> rootArcs = new Stack<FST.Arc<object>>(); FST.Arc<object> arc = automaton.GetFirstArc(new FST.Arc<object>()); FST.BytesReader fstReader = automaton.GetBytesReader(); automaton.ReadFirstTargetArc(arc, arc, fstReader); while (true) { - rootArcs.Add((new FST.Arc<object>()).CopyFrom(arc)); + rootArcs.Push(new FST.Arc<object>().CopyFrom(arc)); if (arc.IsLast) { break; @@ -161,7 +159,6 @@ namespace Lucene.Net.Search.Suggest.Fst } // we want highest weights first. - rootArcs.Reverse(); return rootArcs.ToArray(); } catch (IOException e) @@ -353,14 +350,11 @@ namespace Lucene.Net.Search.Suggest.Fst // Key found. Unless already at i==0, remove it and push up front so // that the ordering // remains identical with the exception of the exact match. - lock (syncLock) + if (key.Equals(list[i].Utf8)) { - if (key.Equals(list[i].Utf8)) - { - var element = list[i]; - list.Remove(element); - list.Insert(0, element); - } + var element = list[i]; + list.Remove(element); + list.Insert(0, element); } return true; }
