3
3
4
4
#if NPGSQL
5
5
6
- using System ;
7
- using System . Collections . Generic ;
8
- using System . Linq ;
9
6
using System . Runtime . CompilerServices ;
10
- using System . Threading . Tasks ;
11
7
using Microsoft . Extensions . Caching . Memory ;
12
8
using Npgsql ;
13
9
@@ -33,35 +29,27 @@ public RawDb(ConcurrentRandom random, AppSettings appSettings)
33
29
34
30
public async Task < World > LoadSingleQueryRow ( )
35
31
{
36
- using ( var db = new NpgsqlConnection ( _connectionString ) )
37
- {
38
- await db . OpenAsync ( ) ;
32
+ using var db = new NpgsqlConnection ( _connectionString ) ;
33
+ await db . OpenAsync ( ) ;
39
34
40
- var ( cmd , _) = CreateReadCommand ( db ) ;
41
- using ( cmd )
42
- {
43
- return await ReadSingleRow ( cmd ) ;
44
- }
45
- }
35
+ var ( cmd , _) = CreateReadCommand ( db ) ;
36
+ using var command = cmd ;
37
+ return await ReadSingleRow ( cmd ) ;
46
38
}
47
39
48
40
public async Task < World [ ] > LoadMultipleQueriesRows ( int count )
49
41
{
50
42
var result = new World [ count ] ;
51
43
52
- using ( var db = new NpgsqlConnection ( _connectionString ) )
53
- {
54
- await db . OpenAsync ( ) ;
44
+ using var db = new NpgsqlConnection ( _connectionString ) ;
45
+ await db . OpenAsync ( ) ;
55
46
56
- var ( cmd , idParameter ) = CreateReadCommand ( db ) ;
57
- using ( cmd )
58
- {
59
- for ( int i = 0 ; i < result . Length ; i ++ )
60
- {
61
- result [ i ] = await ReadSingleRow ( cmd ) ;
62
- idParameter . TypedValue = _random . Next ( 1 , 10001 ) ;
63
- }
64
- }
47
+ var ( cmd , idParameter ) = CreateReadCommand ( db ) ;
48
+ using var command = cmd ;
49
+ for ( int i = 0 ; i < result . Length ; i ++ )
50
+ {
51
+ result [ i ] = await ReadSingleRow ( cmd ) ;
52
+ idParameter . TypedValue = _random . Next ( 1 , 10001 ) ;
65
53
}
66
54
67
55
return result ;
@@ -91,32 +79,28 @@ public Task<CachedWorld[]> LoadCachedQueries(int count)
91
79
92
80
static async Task < CachedWorld [ ] > LoadUncachedQueries ( int id , int i , int count , RawDb rawdb , CachedWorld [ ] result )
93
81
{
94
- using ( var db = new NpgsqlConnection ( rawdb . _connectionString ) )
82
+ using var db = new NpgsqlConnection ( rawdb . _connectionString ) ;
83
+ await db . OpenAsync ( ) ;
84
+
85
+ var ( cmd , idParameter ) = rawdb . CreateReadCommand ( db ) ;
86
+ using var command = cmd ;
87
+ Func < ICacheEntry , Task < CachedWorld > > create = async _ =>
95
88
{
96
- await db . OpenAsync ( ) ;
97
-
98
- var ( cmd , idParameter ) = rawdb . CreateReadCommand ( db ) ;
99
- using ( cmd )
100
- {
101
- Func < ICacheEntry , Task < CachedWorld > > create = async _ =>
102
- {
103
- return await rawdb . ReadSingleRow ( cmd ) ;
104
- } ;
105
-
106
- var cacheKeys = _cacheKeys ;
107
- var key = cacheKeys [ id ] ;
108
-
109
- idParameter . TypedValue = id ;
110
-
111
- for ( ; i < result . Length ; i ++ )
112
- {
113
- result [ i ] = await rawdb . _cache . GetOrCreateAsync ( key , create ) ;
114
-
115
- id = rawdb . _random . Next ( 1 , 10001 ) ;
116
- idParameter . TypedValue = id ;
117
- key = cacheKeys [ id ] ;
118
- }
119
- }
89
+ return await rawdb . ReadSingleRow ( cmd ) ;
90
+ } ;
91
+
92
+ var cacheKeys = _cacheKeys ;
93
+ var key = cacheKeys [ id ] ;
94
+
95
+ idParameter . TypedValue = id ;
96
+
97
+ for ( ; i < result . Length ; i ++ )
98
+ {
99
+ result [ i ] = await rawdb . _cache . GetOrCreateAsync ( key , create ) ;
100
+
101
+ id = rawdb . _random . Next ( 1 , 10001 ) ;
102
+ idParameter . TypedValue = id ;
103
+ key = cacheKeys [ id ] ;
120
104
}
121
105
122
106
return result ;
@@ -125,21 +109,17 @@ static async Task<CachedWorld[]> LoadUncachedQueries(int id, int i, int count, R
125
109
126
110
public async Task PopulateCache ( )
127
111
{
128
- using ( var db = new NpgsqlConnection ( _connectionString ) )
129
- {
130
- await db . OpenAsync ( ) ;
112
+ using var db = new NpgsqlConnection ( _connectionString ) ;
113
+ await db . OpenAsync ( ) ;
131
114
132
- var ( cmd , idParameter ) = CreateReadCommand ( db ) ;
133
- using ( cmd )
134
- {
135
- var cacheKeys = _cacheKeys ;
136
- var cache = _cache ;
137
- for ( var i = 1 ; i < 10001 ; i ++ )
138
- {
139
- idParameter . TypedValue = i ;
140
- cache . Set < CachedWorld > ( cacheKeys [ i ] , await ReadSingleRow ( cmd ) ) ;
141
- }
142
- }
115
+ var ( cmd , idParameter ) = CreateReadCommand ( db ) ;
116
+ using var command = cmd ;
117
+ var cacheKeys = _cacheKeys ;
118
+ var cache = _cache ;
119
+ for ( var i = 1 ; i < 10001 ; i ++ )
120
+ {
121
+ idParameter . TypedValue = i ;
122
+ cache . Set < CachedWorld > ( cacheKeys [ i ] , await ReadSingleRow ( cmd ) ) ;
143
123
}
144
124
145
125
Console . WriteLine ( "Caching Populated" ) ;
@@ -149,37 +129,35 @@ public async Task<World[]> LoadMultipleUpdatesRows(int count)
149
129
{
150
130
var results = new World [ count ] ;
151
131
152
- using ( var db = new NpgsqlConnection ( _connectionString ) )
153
- {
154
- await db . OpenAsync ( ) ;
132
+ using var db = new NpgsqlConnection ( _connectionString ) ;
133
+ await db . OpenAsync ( ) ;
155
134
156
- var ( queryCmd , queryParameter ) = CreateReadCommand ( db ) ;
157
- using ( queryCmd )
135
+ var ( queryCmd , queryParameter ) = CreateReadCommand ( db ) ;
136
+ using ( queryCmd )
137
+ {
138
+ for ( int i = 0 ; i < results . Length ; i ++ )
158
139
{
159
- for ( int i = 0 ; i < results . Length ; i ++ )
160
- {
161
- results [ i ] = await ReadSingleRow ( queryCmd ) ;
162
- queryParameter . TypedValue = _random . Next ( 1 , 10001 ) ;
163
- }
140
+ results [ i ] = await ReadSingleRow ( queryCmd ) ;
141
+ queryParameter . TypedValue = _random . Next ( 1 , 10001 ) ;
164
142
}
143
+ }
165
144
166
- using ( var updateCmd = new NpgsqlCommand ( BatchUpdateString . Query ( count ) , db ) )
167
- {
168
- var ids = BatchUpdateString . Ids ;
169
- var randoms = BatchUpdateString . Randoms ;
170
-
171
- for ( int i = 0 ; i < results . Length ; i ++ )
172
- {
173
- var randomNumber = _random . Next ( 1 , 10001 ) ;
145
+ using ( var updateCmd = new NpgsqlCommand ( BatchUpdateString . Query ( count ) , db ) )
146
+ {
147
+ var ids = BatchUpdateString . Ids ;
148
+ var randoms = BatchUpdateString . Randoms ;
174
149
175
- updateCmd . Parameters . Add ( new NpgsqlParameter < int > ( parameterName : ids [ i ] , value : results [ i ] . Id ) ) ;
176
- updateCmd . Parameters . Add ( new NpgsqlParameter < int > ( parameterName : randoms [ i ] , value : randomNumber ) ) ;
150
+ for ( int i = 0 ; i < results . Length ; i ++ )
151
+ {
152
+ var randomNumber = _random . Next ( 1 , 10001 ) ;
177
153
178
- results [ i ] . RandomNumber = randomNumber ;
179
- }
154
+ updateCmd . Parameters . Add ( new NpgsqlParameter < int > ( parameterName : ids [ i ] , value : results [ i ] . Id ) ) ;
155
+ updateCmd . Parameters . Add ( new NpgsqlParameter < int > ( parameterName : randoms [ i ] , value : randomNumber ) ) ;
180
156
181
- await updateCmd . ExecuteNonQueryAsync ( ) ;
157
+ results [ i ] . RandomNumber = randomNumber ;
182
158
}
159
+
160
+ await updateCmd . ExecuteNonQueryAsync ( ) ;
183
161
}
184
162
185
163
return results ;
@@ -193,17 +171,15 @@ public async Task<List<Fortune>> LoadFortunesRows()
193
171
{
194
172
await db . OpenAsync ( ) ;
195
173
196
- using ( var cmd = new NpgsqlCommand ( "SELECT id, message FROM fortune" , db ) )
197
- using ( var rdr = await cmd . ExecuteReaderAsync ( ) )
174
+ using var cmd = new NpgsqlCommand ( "SELECT id, message FROM fortune" , db ) ;
175
+ using var rdr = await cmd . ExecuteReaderAsync ( ) ;
176
+ while ( await rdr . ReadAsync ( ) )
198
177
{
199
- while ( await rdr . ReadAsync ( ) )
200
- {
201
- result . Add ( new Fortune
202
- (
203
- id : rdr . GetInt32 ( 0 ) ,
204
- message : rdr . GetString ( 1 )
205
- ) ) ;
206
- }
178
+ result . Add ( new Fortune
179
+ (
180
+ id : rdr . GetInt32 ( 0 ) ,
181
+ message : rdr . GetString ( 1 )
182
+ ) ) ;
207
183
}
208
184
}
209
185
@@ -226,16 +202,14 @@ public async Task<List<Fortune>> LoadFortunesRows()
226
202
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
227
203
private async Task < World > ReadSingleRow ( NpgsqlCommand cmd )
228
204
{
229
- using ( var rdr = await cmd . ExecuteReaderAsync ( System . Data . CommandBehavior . SingleRow ) )
230
- {
231
- await rdr . ReadAsync ( ) ;
205
+ using var rdr = await cmd . ExecuteReaderAsync ( System . Data . CommandBehavior . SingleRow ) ;
206
+ await rdr . ReadAsync ( ) ;
232
207
233
- return new World
234
- {
235
- Id = rdr . GetInt32 ( 0 ) ,
236
- RandomNumber = rdr . GetInt32 ( 1 )
237
- } ;
238
- }
208
+ return new World
209
+ {
210
+ Id = rdr . GetInt32 ( 0 ) ,
211
+ RandomNumber = rdr . GetInt32 ( 1 )
212
+ } ;
239
213
}
240
214
241
215
private static readonly object [ ] _cacheKeys = Enumerable . Range ( 0 , 10001 ) . Select ( i => new CacheKey ( i ) ) . ToArray ( ) ;
0 commit comments