You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2022/10/31 06:19:20 UTC

[lucenenet] 12/14: PERFORAMANCE: Lucene.Net.Analysis.Ga.IrishLowerCaseFilter: Use stack and spans to reduce allocations and improve throughput.

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 56c8e08e0d87ba0fe4df158d6a9ab7483e1233e1
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Thu Oct 27 09:14:41 2022 +0700

    PERFORAMANCE: Lucene.Net.Analysis.Ga.IrishLowerCaseFilter: Use stack and spans to reduce allocations and improve throughput.
---
 .../Analysis/Ga/IrishLowerCaseFilter.cs                   | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/Lucene.Net.Analysis.Common/Analysis/Ga/IrishLowerCaseFilter.cs b/src/Lucene.Net.Analysis.Common/Analysis/Ga/IrishLowerCaseFilter.cs
index 0eab8d90a..ec2d6f28a 100644
--- a/src/Lucene.Net.Analysis.Common/Analysis/Ga/IrishLowerCaseFilter.cs
+++ b/src/Lucene.Net.Analysis.Common/Analysis/Ga/IrishLowerCaseFilter.cs
@@ -1,6 +1,8 @@
-// Lucene version compatibility level 4.8.1
+// Lucene version compatibility level 4.8.1
 using J2N;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Util;
+using System;
 using System.Globalization;
 
 namespace Lucene.Net.Analysis.Ga
@@ -62,10 +64,13 @@ namespace Lucene.Net.Analysis.Ga
                     chLen = chLen + 1;
                 }
 
-                for (int i = idx; i < chLen;)
-                {
-                    i += Character.ToChars(Character.ToLower(chArray[i], culture), chArray, i); // LUCENENET specific - use Irish culture when lowercasing
-                }
+                // LUCENENET: Reduce allocations by using the stack and spans
+                var source = new ReadOnlySpan<char>(chArray, idx, chLen);
+                var destination = chArray.AsSpan(idx, chLen);
+                var spare = chLen * sizeof(char) <= Constants.MaxStackByteLimit ? stackalloc char[chLen] : new char[chLen];
+                source.ToLower(spare, culture); // LUCENENET specific - use Irish culture when lowercasing
+                spare.CopyTo(destination);
+
                 return true;
             }
             else