This is an automated email from the ASF dual-hosted git repository. nightowl888 pushed a commit to branch benchmarkdotnet in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit c47729795036b2d3054424d4fd730375970c1898 Author: Shannon <[email protected]> AuthorDate: Wed Jul 15 14:29:23 2020 +1000 Adds simple benchmark between nuget versions --- Lucene.Net.sln | 5 + .../HomePageScriptBenchmarks.cs | 112 +++++++++++++++++++++ .../Lucene.Net.Tests.BenchmarkDotNet.csproj | 17 ++++ src/Lucene.Net.Tests.BenchmarkDotNet/Program.cs | 26 +++++ 4 files changed, 160 insertions(+) diff --git a/Lucene.Net.sln b/Lucene.Net.sln index 7f6fa0562..690dcd988 100644 --- a/Lucene.Net.sln +++ b/Lucene.Net.sln @@ -258,6 +258,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{4D0ED7D9 src\dotnet\Lucene.Net.CodeAnalysis\tools\install.ps1 = src\dotnet\Lucene.Net.CodeAnalysis\tools\install.ps1 src\dotnet\Lucene.Net.CodeAnalysis\tools\uninstall.ps1 = src\dotnet\Lucene.Net.CodeAnalysis\tools\uninstall.ps1 EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net.Tests.BenchmarkDotNet", "src\Lucene.Net.Tests.BenchmarkDotNet\Lucene.Net.Tests.BenchmarkDotNet.csproj", "{0C476146-411E-4C94-8A59-726A5F982A89}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lucene.Net.Tests.AllProjects", "src\Lucene.Net.Tests.AllProjects\Lucene.Net.Tests.AllProjects.csproj", "{9880B87D-8D14-476B-B093-9C3AA0DA8B24}" EndProject @@ -554,6 +555,10 @@ Global {9880B87D-8D14-476B-B093-9C3AA0DA8B24}.Release|Any CPU.Build.0 = Release|Any CPU {8988CDA4-8420-4BEE-869A-66825055EED2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8988CDA4-8420-4BEE-869A-66825055EED2}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {0C476146-411E-4C94-8A59-726A5F982A89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0C476146-411E-4C94-8A59-726A5F982A89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C476146-411E-4C94-8A59-726A5F982A89}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0C476146-411E-4C94-8A59-726A5F982A89}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Lucene.Net.Tests.BenchmarkDotNet/HomePageScriptBenchmarks.cs b/src/Lucene.Net.Tests.BenchmarkDotNet/HomePageScriptBenchmarks.cs new file mode 100644 index 000000000..37ac4b209 --- /dev/null +++ b/src/Lucene.Net.Tests.BenchmarkDotNet/HomePageScriptBenchmarks.cs @@ -0,0 +1,112 @@ +using System; +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Jobs; +using Lucene.Net.Util; +using Lucene.Net.Store; +using Lucene.Net.Analysis.Standard; +using Lucene.Net.Index; +using Lucene.Net.Documents; +using Lucene.Net.Search; +using System.Diagnostics; + +namespace Lucene.Net.Tests.BenchmarkDotNet +{ + /* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + [MemoryDiagnoser] + [Config(typeof(Config))] + public class HomePageScriptBenchmarks + { + private class Config : ManualConfig + { + public Config() + { + var baseJob = Job.MediumRun; + + AddJob(baseJob.WithNuGet("Lucene.Net.Analysis.Common", "4.8.0-beta00009").WithId("4.8.0-beta00009")); + AddJob(baseJob.WithNuGet("Lucene.Net.Analysis.Common", "4.8.0-beta00008").WithId("4.8.0-beta00008")); + AddJob(baseJob.WithNuGet("Lucene.Net.Analysis.Common", "4.8.0-beta00007").WithId("4.8.0-beta00007")); + } + } + + private const int _directoryWriterIterations = 10; + private const int _indexSearchIterations = 25; + + [Benchmark] + public void HomePageScript() + { + // Ensures index backwards compatibility + var AppLuceneVersion = LuceneVersion.LUCENE_48; + + for (int d = 0; d < _directoryWriterIterations; d++) + { + using var dir = new RAMDirectory(); + + //create an analyzer to process the text + var analyzer = new StandardAnalyzer(AppLuceneVersion); + + //create an index writer + var indexConfig = new IndexWriterConfig(AppLuceneVersion, analyzer); + using var writer = new IndexWriter(dir, indexConfig); + + for (int i = 0; i < _indexSearchIterations; i++) + { + var source = new + { + Name = $"Kermit{i} the Frog{i}", + FavoritePhrase = $"The quick{i} brown{i} fox{i} jumps{i} over{i} the lazy{i} dog{i} " + }; + Document doc = new Document + { + // StringField indexes but doesn't tokenize + new StringField("name", source.Name, Field.Store.YES), + new TextField("favoritePhrase", source.FavoritePhrase, Field.Store.YES) + }; + + writer.AddDocument(doc); + writer.Flush(triggerMerge: false, applyAllDeletes: false); + } + + for (int i = 0; i < _indexSearchIterations; i++) + { + // search with a phrase + var phrase = new MultiPhraseQuery + { + new Term("favoritePhrase", $"brown{i}"), + new Term("favoritePhrase", $"fox{i}") + }; + + // re-use the writer to get real-time updates + using var reader = writer.GetReader(applyAllDeletes: true); + var searcher = new IndexSearcher(reader); + var hits = searcher.Search(phrase, 20 /* top 20 */).ScoreDocs; + Debug.Assert(hits.Length > 0); + foreach (var hit in hits) + { + var foundDoc = searcher.Doc(hit.Doc); + var score = hit.Score; + var name = foundDoc.Get("name"); + var favoritePhrase = foundDoc.Get("favoritePhrase"); + } + } + } + } + + } +} diff --git a/src/Lucene.Net.Tests.BenchmarkDotNet/Lucene.Net.Tests.BenchmarkDotNet.csproj b/src/Lucene.Net.Tests.BenchmarkDotNet/Lucene.Net.Tests.BenchmarkDotNet.csproj new file mode 100644 index 000000000..5d4af5aea --- /dev/null +++ b/src/Lucene.Net.Tests.BenchmarkDotNet/Lucene.Net.Tests.BenchmarkDotNet.csproj @@ -0,0 +1,17 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>netcoreapp3.1</TargetFramework> + </PropertyGroup> + + <ItemGroup> + <PackageReference Include="BenchmarkDotNet" Version="0.12.1" /> + <PackageReference Include="BenchmarkDotNet.Diagnostics.Windows" Version="0.12.1" /> + </ItemGroup> + + <ItemGroup> + <PackageReference Include="Lucene.Net.Analysis.Common" Version="4.8.0-beta00005" /> + </ItemGroup> + +</Project> diff --git a/src/Lucene.Net.Tests.BenchmarkDotNet/Program.cs b/src/Lucene.Net.Tests.BenchmarkDotNet/Program.cs new file mode 100644 index 000000000..c65ec225c --- /dev/null +++ b/src/Lucene.Net.Tests.BenchmarkDotNet/Program.cs @@ -0,0 +1,26 @@ +using BenchmarkDotNet.Running; + +namespace Lucene.Net.Tests.BenchmarkDotNet +{ + /* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + class Program + { + private static void Main(string[] args) => new BenchmarkSwitcher(typeof(Program).Assembly).Run(args); + } +}
