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 2020/06/30 21:50:45 UTC
[lucenenet] 09/27: Lucene.Net.Util.Automaton: Fixed State class to
initialize and trim more efficiently (#295,
#261). Fixes the performance of
Lucene.Net.Util.Automaton.TestBasicOperations::TestEmptyLanguageConcatenate().
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 867834b34068692c8adecff9fee690b9390a4ca5
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Sun Jun 28 21:49:07 2020 +0700
Lucene.Net.Util.Automaton: Fixed State class to initialize and trim more efficiently (#295, #261). Fixes the performance of Lucene.Net.Util.Automaton.TestBasicOperations::TestEmptyLanguageConcatenate().
---
Directory.Build.targets | 8 +++++++-
src/Lucene.Net/Util/Automaton/State.cs | 20 +++++++++++++-------
2 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/Directory.Build.targets b/Directory.Build.targets
index a0bdb4d..88f406b 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -19,8 +19,10 @@
-->
<Project>
+ <!-- Features in .NET Standard and .NET Core only (no .NET Framework support) -->
<PropertyGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp')) ">
<DefineConstants>$(DefineConstants);NETSTANDARD</DefineConstants>
+ <DefineConstants>$(DefineConstants);FEATURE_ARRAYEMPTY</DefineConstants>
<DebugType>portable</DebugType>
</PropertyGroup>
@@ -66,7 +68,11 @@
</PropertyGroup>
- <!-- Features in .NET Framework 4.5+ only -->
+ <!-- Features in .NET Framework 4.6+ only -->
+ <PropertyGroup Condition="$(TargetFramework.StartsWith('net46')) Or $(TargetFramework.StartsWith('net47')) Or $(TargetFramework.StartsWith('net48'))">
+ <DefineConstants>$(DefineConstants);FEATURE_ARRAYEMPTY</DefineConstants>
+ </PropertyGroup>
+
<PropertyGroup Condition="$(TargetFramework.StartsWith('net4'))">
<DefineConstants>$(DefineConstants);FEATURE_SERIALIZABLE_EXCEPTIONS</DefineConstants>
diff --git a/src/Lucene.Net/Util/Automaton/State.cs b/src/Lucene.Net/Util/Automaton/State.cs
index 587c403..1df6c98 100644
--- a/src/Lucene.Net/Util/Automaton/State.cs
+++ b/src/Lucene.Net/Util/Automaton/State.cs
@@ -48,11 +48,15 @@ namespace Lucene.Net.Util.Automaton
[SuppressMessage("Microsoft.Performance", "CA1819", Justification = "Lucene's design requires some writable array properties")]
public Transition[] TransitionsArray
{
- get { return transitionsArray; }
+ get => transitionsArray;
// LUCENENET NOTE: Setter removed because it is apparently not in use outside of this class
}
- private Transition[] transitionsArray;
- internal int numTransitions; // LUCENENET NOTE: Made internal because we already have a public property for access
+#if FEATURE_ARRAYEMPTY
+ private Transition[] transitionsArray = Array.Empty<Transition>();
+#else
+ private Transition[] transitionsArray = new Transition[0];
+#endif
+ internal int numTransitions = 0;// LUCENENET NOTE: Made internal because we already have a public property for access
internal int number;
@@ -64,7 +68,7 @@ namespace Lucene.Net.Util.Automaton
/// </summary>
public State()
{
- ResetTransitions();
+ //ResetTransitions(); // LUCENENET: Let class initializer set these
id = next_id++;
}
@@ -73,7 +77,11 @@ namespace Lucene.Net.Util.Automaton
/// </summary>
internal void ResetTransitions()
{
+#if FEATURE_ARRAYEMPTY
+ transitionsArray = Array.Empty<Transition>();
+#else
transitionsArray = new Transition[0];
+#endif
numTransitions = 0;
}
@@ -242,9 +250,7 @@ namespace Lucene.Net.Util.Automaton
{
if (numTransitions < transitionsArray.Length)
{
- Transition[] newArray = new Transition[numTransitions];
- Array.Copy(transitionsArray, 0, newArray, 0, numTransitions);
- transitionsArray = newArray;
+ Array.Resize(ref transitionsArray, numTransitions); // LUCENENET: Resize rather than copy
}
}