Lith 10 hónapja
szülő
commit
cdde627d95

+ 7 - 0
Vitorm.sln

@@ -34,6 +34,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vitorm.Data.Console", "test
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vitorm.Sqlite.Console", "test\Vitorm.Sqlite.Console\Vitorm.Sqlite.Console.csproj", "{FDE612FB-A590-4937-93E8-314C9DF9F39E}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vitorm.Data.Benchmark", "test\Vitorm.Data.Benchmark\Vitorm.Data.Benchmark.csproj", "{02AE1368-8B79-4CE2-8518-13A7B91D345B}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -84,6 +86,10 @@ Global
 		{FDE612FB-A590-4937-93E8-314C9DF9F39E}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{FDE612FB-A590-4937-93E8-314C9DF9F39E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{FDE612FB-A590-4937-93E8-314C9DF9F39E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{02AE1368-8B79-4CE2-8518-13A7B91D345B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{02AE1368-8B79-4CE2-8518-13A7B91D345B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{02AE1368-8B79-4CE2-8518-13A7B91D345B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{02AE1368-8B79-4CE2-8518-13A7B91D345B}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -100,6 +106,7 @@ Global
 		{BF06299A-78A1-44C9-BCE6-4226BA326739} = {7904FE51-04FF-4477-8E3A-CC340389EE32}
 		{DACD0587-AF7F-4ACC-9E67-1E8196C66DAF} = {7904FE51-04FF-4477-8E3A-CC340389EE32}
 		{FDE612FB-A590-4937-93E8-314C9DF9F39E} = {7904FE51-04FF-4477-8E3A-CC340389EE32}
+		{02AE1368-8B79-4CE2-8518-13A7B91D345B} = {7904FE51-04FF-4477-8E3A-CC340389EE32}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {C7DA16E3-9949-49FA-B0B4-F830636DE60F}

+ 117 - 0
test/Vitorm.Data.Benchmark/Program.cs

@@ -0,0 +1,117 @@
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Running;
+
+using Vitorm;
+using Vitorm.Sql;
+
+namespace App
+{
+
+    public class VitormBenchmark
+    {
+        [Params(10000)]
+        public int N;
+
+        [Params("Data", "Vitorm")]
+        public string dataType;
+
+        [Params(false, true)]
+        public bool queryJoin;
+
+        //[Params(false, true)]
+        //public bool reduceMember;
+
+        [GlobalSetup]
+        public void Setup()
+        {
+        }
+
+        [Benchmark]
+        public void Run()
+        {
+            Run(N, dataType, queryJoin);
+        }
+
+
+        public static void Run(int N, string dataType, bool queryJoin)
+        {
+            for (int i = 0; i < N; i++)
+            {
+                var query = GetQuery(dataType);
+                if (queryJoin) QueryJoin(query);
+                else Query(query);
+            }
+        }
+
+        static IQueryable<User> GetQuery(string dataType)
+        {
+            var connectionString = "data source=sqlite.db;";
+            return dataType == "Data" ? Data.Query<User>() : new SqlDbContext().UseSqlite(connectionString).AutoDisposeAfterQuery().Query<User>();
+        }
+
+
+        public static void QueryJoin(IQueryable<User> userSet)
+        {
+            var query =
+                    from user in userSet
+                    from father in userSet.Where(father => user.fatherId == father.id).DefaultIfEmpty()
+                    from mother in userSet.Where(mother => user.motherId == mother.id).DefaultIfEmpty()
+                    where user.id > 1
+                    orderby user.id
+                    select new
+                    {
+                        user,
+                        father,
+                        mother,
+                        testId = user.id + 100,
+                        hasFather = father.name != null ? true : false
+                    };
+
+            query = query.Skip(1).Take(2);
+
+            var sql = query.ToExecuteString();
+            //var userList = query.ToList();
+        }
+
+        public static void Query(IQueryable<User> userSet)
+        {
+            var query1 =
+                    from user in userSet
+                    where user.id > 1
+                    orderby user.id
+                    select user;
+
+            var query = query1.Skip(1).Take(2);
+
+            var sql = query.ToExecuteString();
+            //var userList = query.ToList();
+        }
+
+
+
+    }
+
+    public class Program
+    {
+        static void Main(string[] args)
+        {
+            var summary = BenchmarkRunner.Run<VitormBenchmark>();
+        }
+
+    }
+
+
+
+
+    // Entity Definition
+    [System.ComponentModel.DataAnnotations.Schema.Table("User")]
+    public class User
+    {
+        [System.ComponentModel.DataAnnotations.Key]
+        public int id { get; set; }
+        public string name { get; set; }
+        public DateTime? birth { get; set; }
+        public int? fatherId { get; set; }
+        public int? motherId { get; set; }
+    }
+}

+ 25 - 0
test/Vitorm.Data.Benchmark/Vitorm.Data.Benchmark.csproj

@@ -0,0 +1,25 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net6.0</TargetFramework>
+        <ImplicitUsings>enable</ImplicitUsings>
+        <Nullable>enable</Nullable>
+    </PropertyGroup>
+
+    <ItemGroup>
+      <PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
+    </ItemGroup>
+
+    <ItemGroup>
+        <ProjectReference Include="..\..\src\Vitorm.Data\Vitorm.Data.csproj" />
+        <ProjectReference Include="..\..\src\Vitorm.Sqlite\Vitorm.Sqlite.csproj" />
+    </ItemGroup>
+
+    <ItemGroup>
+        <None Update="appsettings.json">
+            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+    </ItemGroup>
+
+</Project>

+ 11 - 0
test/Vitorm.Data.Benchmark/appsettings.json

@@ -0,0 +1,11 @@
+{
+  "Vitorm": {
+    "Data": [
+      {
+        "provider": "Sqlite",
+        "namespace": "App",
+        "connectionString": "data source=sqlite.db;"
+      }
+    ]
+  }
+}