/PerfRunner/Program.cs

https://github.com/henrylu/SubSonic-3.0 · C# · 187 lines · 131 code · 19 blank · 37 comment · 9 complexity · b537f24f6519ccb9f05e8253ea1c3f71 MD5 · raw file

  1. //
  2. // SubSonic - http://subsonicproject.com
  3. //
  4. // The contents of this file are subject to the New BSD
  5. // License (the "License"); you may not use this file
  6. // except in compliance with the License. You may obtain a copy of
  7. // the License at http://www.opensource.org/licenses/bsd-license.php
  8. //
  9. // Software distributed under the License is distributed on an
  10. // "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  11. // implied. See the License for the specific language governing
  12. // rights and limitations under the License.
  13. //
  14. using System;
  15. using System.Linq;
  16. using SubSonic.DataProviders;
  17. using SubSonic.Query;
  18. using SubSonic.Repository;
  19. using SubSonic.Tests;
  20. using SubSonic.Tests.Linq.TestBases;
  21. using SouthWind;
  22. using System.Configuration;
  23. namespace PerfRunner
  24. {
  25. public class Program
  26. {
  27. private static readonly IDataProvider mySqlProvider = ProviderFactory.GetProvider(TestConfiguration.MySqlTestConnectionString, DbClientTypeName.MySql);
  28. private static readonly IDataProvider sql2005Provider = ProviderFactory.GetProvider(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString, DbClientTypeName.MsSql);
  29. private static readonly IDataProvider sql2008Provider = ProviderFactory.GetProvider(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString, DbClientTypeName.MsSql);
  30. private static void Main(string[] args)
  31. {
  32. //RunInserts();
  33. //SubSonic.Tests.ActiveRecord.FetchTests.ActiveRecord_Should_Return_10_Products_LessOrEqual_To_10();
  34. //SubSonic.Tests.ActiveRecord.FetchTests.ActiveRecord_Should_Return_10_Products_Paged();
  35. //RunSimpleRepoSelects();
  36. //RunIQSelects();
  37. //RunSimpleQuerySelects();
  38. RunAR();
  39. RunARLists();
  40. Console.WriteLine("Done");
  41. Console.ReadLine();
  42. }
  43. private static void RunARLists()
  44. {
  45. //SelectActiveRecordList(mySqlProvider);
  46. SelectActiveRecordList(sql2005Provider);
  47. //SelectActiveRecordList(sql2008Provider);
  48. }
  49. private static void RunAR()
  50. {
  51. //SelectActiveRecord(mySqlProvider);
  52. SelectActiveRecord(sql2005Provider);
  53. //SelectActiveRecord(sql2008Provider);
  54. }
  55. private static void RunSimpleQuerySelects()
  56. {
  57. //SelectSimpleQuery(mySqlProvider);
  58. SelectSimpleQuery(sql2005Provider);
  59. //SelectSimpleQuery(sql2008Provider);
  60. }
  61. private static void RunSimpleRepoSelects()
  62. {
  63. //SelectSimpleRepo(mySqlProvider);
  64. SelectSimpleRepo(sql2005Provider);
  65. //SelectSimpleRepo(sql2008Provider);
  66. }
  67. private static void RunIQSelects()
  68. {
  69. //SelectIQueryable(mySqlProvider);
  70. SelectIQueryable(sql2005Provider);
  71. //SelectIQueryable(sql2008Provider);
  72. }
  73. private static void RunInserts()
  74. {
  75. //RunInsert(mySqlProvider);
  76. RunInsert(sql2005Provider);
  77. //RunInsert(sql2008Provider);
  78. }
  79. private static void SelectActiveRecordList(IDataProvider provider)
  80. {
  81. Console.WriteLine("Selecting 1000 records of 10/each with AR: " + DateTime.Now + " using " + provider.Name);
  82. DateTime start = DateTime.Now;
  83. for (int i = 1; i < 1000; i++)
  84. {
  85. var p = Product.Find(x => x.ProductID > 0 && x.ProductID <= 10);
  86. //Console.Write(i + ",");
  87. }
  88. WriteResult(start);
  89. }
  90. static void WriteResult(DateTime startTime)
  91. {
  92. TimeSpan ts = DateTime.Now.Subtract(startTime);
  93. Console.WriteLine(String.Format("End: {0} - Took: {1} minutes {2}.{3} seconds", DateTime.Now, ts.Minutes, ts.Seconds, ts.Milliseconds));
  94. }
  95. private static void SelectActiveRecord(IDataProvider provider)
  96. {
  97. Console.WriteLine("Selecting 10000 records with AR: " + DateTime.Now + " using " + provider.Name);
  98. DateTime start = DateTime.Now;
  99. for (int i = 1; i < 10000; i++)
  100. {
  101. var p = Product.SingleOrDefault(x => x.ProductID == 1, provider.ConnectionString, provider.DbDataProviderName);
  102. //Console.Write(i + ",");
  103. }
  104. WriteResult(start);
  105. }
  106. private static void SelectSimpleQuery(IDataProvider provider)
  107. {
  108. Console.WriteLine("Selecting 10000 records with SimpleQuery: " + DateTime.Now + " using " + provider.Name);
  109. DateTime start = DateTime.Now;
  110. for (int i = 1; i < 10000; i++)
  111. {
  112. SubSonic.Tests.TestClasses.Product p =
  113. new Select(provider).From<SubSonic.Tests.TestClasses.Product>().Where("ProductID").IsEqualTo(1).ExecuteSingle<SubSonic.Tests.TestClasses.Product>();
  114. //Console.Write(i + ",");
  115. }
  116. WriteResult(start);
  117. }
  118. private static void SelectSimpleRepo(IDataProvider provider)
  119. {
  120. Console.WriteLine("Selecting 10000 records with SimpleRepo: " + DateTime.Now + " using " + provider.Name);
  121. var repo = new SimpleRepository(provider);
  122. DateTime start = DateTime.Now;
  123. for (int i = 1; i < 10000; i++)
  124. {
  125. SubSonic.Tests.TestClasses.Product p = repo.Single<SubSonic.Tests.TestClasses.Product>(1);
  126. //Console.Write(i + ",");
  127. }
  128. WriteResult(start);
  129. }
  130. private static void SelectIQueryable(IDataProvider provider)
  131. {
  132. Console.WriteLine("Selecting 10000 records with IQueryable: " + DateTime.Now + " using " + provider.Name);
  133. var db = new TestDB(provider);
  134. DateTime start = DateTime.Now;
  135. for (int i = 1; i < 10000; i++)
  136. {
  137. SubSonic.Tests.TestClasses.Product p = db.Products.SingleOrDefault(x => x.ProductID == 1);
  138. //Console.Write(i + ",");
  139. }
  140. WriteResult(start);
  141. }
  142. private static void RunInsert(IDataProvider provider)
  143. {
  144. ResetDB(provider);
  145. var repo = new SimpleRepository(provider);
  146. Console.WriteLine("Inserting 1000 rows using Simple Repo: " + DateTime.Now + " using " + provider.Name);
  147. DateTime start = DateTime.Now;
  148. for (int i = 1; i < 1000; i++)
  149. {
  150. SubSonic.Tests.TestClasses.Product p = new SubSonic.Tests.TestClasses.Product();
  151. p.CategoryID = 1;
  152. p.Discontinued = false;
  153. p.ProductName = "Product" + i;
  154. p.Sku = Guid.NewGuid();
  155. p.UnitPrice = 1000;
  156. repo.Add(p);
  157. //Console.Write(i + ",");
  158. }
  159. WriteResult(start);
  160. }
  161. private static void ResetDB(IDataProvider provider)
  162. {
  163. var setup = new Setup(provider);
  164. setup.DropTestTables();
  165. setup.CreateTestTable();
  166. }
  167. }
  168. }