benchmarks/Elastic.Apm.Benchmarks/SignatureParserBenchmark.cs (44 lines of code) (raw):

// Licensed to Elasticsearch B.V under // one or more agreements. // Elasticsearch B.V licenses this file to you under the Apache 2.0 License. // See the LICENSE file in the project root for more information using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text; using BenchmarkDotNet.Attributes; using Elastic.Apm.Libraries.Newtonsoft.Json; using Elastic.Apm.Libraries.Newtonsoft.Json.Linq; using Elastic.Apm.Model; namespace Elastic.Apm.Benchmarks { public class SignatureParserBenchmark { [Benchmark] public void TestDbSignatures() { var parserData = GetSqlSignatureExamplesTestData(); foreach (var data in parserData) { var signatureParser = new SignatureParser(new Scanner()); var name = new StringBuilder(); signatureParser.QuerySignature((data[0] as string)?.Replace(Environment.NewLine, " "), name, false); } } private static IEnumerable<object[]> GetSqlSignatureExamplesTestData() { var projectRoot = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var filePath = Path.GetFullPath(Path.Combine(projectRoot, "TestResources" + Path.DirectorySeparatorChar + "db" + Path.DirectorySeparatorChar + "sql_signature_examples.json")); using (var file = File.OpenText(filePath)) using (var reader = new JsonTextReader(file)) { var array = (JArray)JToken.ReadFrom(reader); foreach (var item in array) { var input = item["input"].Value<string>(); var output = item["output"].Value<string>(); yield return new object[] { input, output }; } } } } }