1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . Data ;
3
4
using System . Diagnostics ;
4
5
using System . Linq ;
5
6
using System . Reflection ;
6
7
using NUnit . Framework ;
8
+ using ServiceStack . DataAnnotations ;
7
9
using ServiceStack . OrmLite . Dapper ;
8
10
9
11
namespace ServiceStack . OrmLite . Tests . UseCase
@@ -26,7 +28,7 @@ class Post
26
28
27
29
}
28
30
29
- [ Ignore , Explicit ( "Integration Test" ) ]
31
+ [ NUnit . Framework . Ignore , Explicit ( "Integration Test" ) ]
30
32
public class PostPerfTests : OrmLiteTestBase
31
33
{
32
34
public PostPerfTests ( )
@@ -82,54 +84,6 @@ insert Post ([Text],CreationDate, LastChangeDate) values (replicate('x', 2000),
82
84
cmd . ExecuteNonQuery ( ) ;
83
85
}
84
86
}
85
-
86
- class Test
87
- {
88
- public static Test Create ( Action < int > iteration , string name )
89
- {
90
- return new Test { Iteration = iteration , Name = name } ;
91
- }
92
-
93
- public Action < int > Iteration { get ; set ; }
94
- public string Name { get ; set ; }
95
- public Stopwatch Watch { get ; set ; }
96
- }
97
-
98
- class Tester : List < Test >
99
- {
100
- public void Add ( Action < int > iteration , string name )
101
- {
102
- Add ( Test . Create ( iteration , name ) ) ;
103
- }
104
-
105
- public void Run ( int iterations )
106
- {
107
- // warmup
108
- foreach ( var test in this )
109
- {
110
- test . Iteration ( iterations + 1 ) ;
111
- test . Watch = new Stopwatch ( ) ;
112
- test . Watch . Reset ( ) ;
113
- }
114
-
115
- var rand = new Random ( ) ;
116
- for ( int i = 1 ; i <= iterations ; i ++ )
117
- {
118
- foreach ( var test in this . OrderBy ( ignore => rand . Next ( ) ) )
119
- {
120
- test . Watch . Start ( ) ;
121
- test . Iteration ( i ) ;
122
- test . Watch . Stop ( ) ;
123
- }
124
- }
125
-
126
- foreach ( var test in this . OrderBy ( t => t . Watch . ElapsedMilliseconds ) )
127
- {
128
- Console . WriteLine ( test . Name + " took " + test . Watch . ElapsedMilliseconds + "ms" ) ;
129
- }
130
- }
131
- }
132
-
133
87
[ Test ]
134
88
public void Run_single_select_Dapper ( )
135
89
{
@@ -185,4 +139,129 @@ public void Run_multi_select_OrmLite_SqlExpression()
185
139
tester . Run ( 50 ) ;
186
140
}
187
141
}
142
+
143
+ [ NUnit . Framework . Ignore , Explicit ( "Integration Test" ) ]
144
+ public class AdventureWorksPerfTests : OrmLiteTestBase
145
+ {
146
+ private IDbConnection db ;
147
+
148
+ public AdventureWorksPerfTests ( )
149
+ {
150
+ var dbFactory = new OrmLiteConnectionFactory (
151
+ "data source=localhost;initial catalog=AdventureWorks;integrated security=SSPI;persist security info=False;packet size=4096" ,
152
+ SqlServer2012Dialect . Provider ) ;
153
+
154
+ db = dbFactory . Open ( ) ;
155
+ }
156
+
157
+ [ TearDown ]
158
+ public void TearDown ( )
159
+ {
160
+ db . Dispose ( ) ;
161
+ }
162
+
163
+ private static string SqlSelectCommandText = @"SELECT [SalesOrderID],[RevisionNumber],[OrderDate],[DueDate],[ShipDate],[Status],[OnlineOrderFlag],[SalesOrderNumber],[PurchaseOrderNumber],[AccountNumber],[CustomerID],[SalesPersonID],[TerritoryID],[BillToAddressID],[ShipToAddressID],[ShipMethodID],[CreditCardID],[CreditCardApprovalCode],[CurrencyRateID],[SubTotal],[TaxAmt],[Freight],[TotalDue],[Comment],[rowguid],[ModifiedDate] FROM [Sales].[SalesOrderHeader]" ;
164
+
165
+ [ Test ]
166
+ public void Select_all_SalesOrderHeader_Dapper ( )
167
+ {
168
+ db . Query < SalesOrderHeader > ( SqlSelectCommandText ) . AsList ( ) ;
169
+
170
+ var tester = new Tester ( ) ;
171
+
172
+ tester . Add ( id => db . Query < SalesOrderHeader > ( SqlSelectCommandText ) . AsList ( ) , "Dapper Query" ) ;
173
+
174
+ tester . Run ( 10 ) ;
175
+ }
176
+
177
+ [ Test ]
178
+ public void Select_all_SalesOrderHeader_OrmLite ( )
179
+ {
180
+ var tester = new Tester ( ) ;
181
+
182
+ tester . Add ( id => db . SqlList < SalesOrderHeader > ( SqlSelectCommandText ) , "OrmLite Query" ) ;
183
+
184
+ tester . Run ( 10 ) ;
185
+ }
186
+ }
187
+
188
+ [ Schema ( "Sales" ) ]
189
+ public class SalesOrderHeader
190
+ {
191
+ public string AccountNumber { get ; set ; }
192
+ public string Comment { get ; set ; }
193
+ public string CreditCardApprovalCode { get ; set ; }
194
+ public DateTime DueDate { get ; set ; }
195
+ public decimal Freight { get ; set ; }
196
+ public DateTime ModifiedDate { get ; set ; }
197
+ public bool OnlineOrderFlag { get ; set ; }
198
+ public DateTime OrderDate { get ; set ; }
199
+ public string PurchaseOrderNumber { get ; set ; }
200
+ public byte RevisionNumber { get ; set ; }
201
+ public Guid Rowguid { get ; set ; }
202
+ public int SalesOrderId { get ; set ; }
203
+ public string SalesOrderNumber { get ; set ; }
204
+ public DateTime ? ShipDate { get ; set ; }
205
+ public byte Status { get ; set ; }
206
+ public decimal SubTotal { get ; set ; }
207
+ public decimal TaxAmt { get ; set ; }
208
+ public decimal TotalDue { get ; set ; }
209
+
210
+ public int CustomerID { get ; set ; }
211
+ public int ? SalesPersonID { get ; set ; }
212
+ public int ? TerritoryID { get ; set ; }
213
+ public int BillToAddressID { get ; set ; }
214
+ public int ShipToAddressID { get ; set ; }
215
+ public int ShipMethodID { get ; set ; }
216
+ public int ? CreditCardID { get ; set ; }
217
+ public int ? CurrencyRateID { get ; set ; }
218
+ }
219
+
220
+ class Test
221
+ {
222
+ public static Test Create ( Action < int > iteration , string name )
223
+ {
224
+ return new Test { Iteration = iteration , Name = name } ;
225
+ }
226
+
227
+ public Action < int > Iteration { get ; set ; }
228
+ public string Name { get ; set ; }
229
+ public Stopwatch Watch { get ; set ; }
230
+ }
231
+
232
+ class Tester : List < Test >
233
+ {
234
+ public void Add ( Action < int > iteration , string name )
235
+ {
236
+ Add ( Test . Create ( iteration , name ) ) ;
237
+ }
238
+
239
+ public void Run ( int iterations )
240
+ {
241
+ // warmup
242
+ foreach ( var test in this )
243
+ {
244
+ test . Iteration ( iterations + 1 ) ;
245
+ test . Watch = new Stopwatch ( ) ;
246
+ test . Watch . Reset ( ) ;
247
+ }
248
+
249
+ var rand = new Random ( ) ;
250
+ for ( int i = 1 ; i <= iterations ; i ++ )
251
+ {
252
+ foreach ( var test in this . OrderBy ( ignore => rand . Next ( ) ) )
253
+ {
254
+ test . Watch . Start ( ) ;
255
+ test . Iteration ( i ) ;
256
+ test . Watch . Stop ( ) ;
257
+ }
258
+ }
259
+
260
+ foreach ( var test in this . OrderBy ( t => t . Watch . ElapsedMilliseconds ) )
261
+ {
262
+ Console . WriteLine ( test . Name + " took " + test . Watch . ElapsedMilliseconds + "ms" ) ;
263
+ }
264
+ }
265
+ }
266
+
188
267
}
0 commit comments