Program.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using BenchmarkDotNet.Attributes;
  2. using BenchmarkDotNet.Running;
  3. using Vitorm;
  4. using Vitorm.Sql;
  5. namespace App
  6. {
  7. public class VitormBenchmark
  8. {
  9. [Params(10000)]
  10. public int N;
  11. [Params("Data", "Vitorm")]
  12. public string dataType;
  13. [Params(false, true)]
  14. public bool queryJoin;
  15. //[Params(false, true)]
  16. //public bool reduceMember;
  17. [GlobalSetup]
  18. public void Setup()
  19. {
  20. }
  21. [Benchmark]
  22. public void Run()
  23. {
  24. Run(N, dataType, queryJoin);
  25. }
  26. public static void Run(int N, string dataType, bool queryJoin)
  27. {
  28. for (int i = 0; i < N; i++)
  29. {
  30. var query = GetQuery(dataType);
  31. if (queryJoin) QueryJoin(query);
  32. else Query(query);
  33. }
  34. }
  35. static IQueryable<User> GetQuery(string dataType)
  36. {
  37. var connectionString = "data source=sqlite.db;";
  38. return dataType == "Data" ? Data.Query<User>() : new SqlDbContext().UseSqlite(connectionString).AutoDisposeAfterQuery().Query<User>();
  39. }
  40. public static void QueryJoin(IQueryable<User> userSet)
  41. {
  42. var query =
  43. from user in userSet
  44. from father in userSet.Where(father => user.fatherId == father.id).DefaultIfEmpty()
  45. from mother in userSet.Where(mother => user.motherId == mother.id).DefaultIfEmpty()
  46. where user.id > 1
  47. orderby user.id
  48. select new
  49. {
  50. user,
  51. father,
  52. mother,
  53. testId = user.id + 100,
  54. hasFather = father.name != null ? true : false
  55. };
  56. query = query.Skip(1).Take(2);
  57. var sql = query.ToExecuteString();
  58. //var userList = query.ToList();
  59. }
  60. public static void Query(IQueryable<User> userSet)
  61. {
  62. var query1 =
  63. from user in userSet
  64. where user.id > 1
  65. orderby user.id
  66. select user;
  67. var query = query1.Skip(1).Take(2);
  68. var sql = query.ToExecuteString();
  69. //var userList = query.ToList();
  70. }
  71. }
  72. public class Program
  73. {
  74. static void Main(string[] args)
  75. {
  76. var summary = BenchmarkRunner.Run<VitormBenchmark>();
  77. }
  78. }
  79. // Entity Definition
  80. [System.ComponentModel.DataAnnotations.Schema.Table("User")]
  81. public class User
  82. {
  83. [System.ComponentModel.DataAnnotations.Key]
  84. public int id { get; set; }
  85. public string name { get; set; }
  86. public DateTime? birth { get; set; }
  87. public int? fatherId { get; set; }
  88. public int? motherId { get; set; }
  89. }
  90. }