質問編集履歴

4

誤時修正

2020/09/12 13:24

投稿

sinonome
sinonome

スコア8

test CHANGED
File without changes
test CHANGED
@@ -454,7 +454,7 @@
454
454
 
455
455
  ###追追記(これで解決)
456
456
 
457
- radian回答からStopwatchクラスをforより前に使用してからやれば早くなるのではと予想。
457
+ radianさんの回答からStopwatchクラスをforより前に使用してからやれば早くなるのではと予想。
458
458
 
459
459
  それで以下のソースコードの実験を行った。
460
460
 

3

誤時修正、追追実験と問題解決

2020/09/12 13:24

投稿

sinonome
sinonome

スコア8

test CHANGED
File without changes
test CHANGED
@@ -110,349 +110,449 @@
110
110
 
111
111
  00:00:00.0000002
112
112
 
113
+ ```
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+ ###追記。さらに検証実験を行った
124
+
125
+ Zuishinさんの意見を取り入れ、追加の実験を行った。
126
+
127
+
128
+
129
+ - 行った実験
130
+
131
+ 1 - forを使わない。
132
+
133
+ 2 - ElapsedをListにAddしてあとからWirteLineする。
134
+
135
+ 3 - Listではなく配列
136
+
137
+ 4 - ビルドする。
138
+
139
+
140
+
141
+
142
+
143
+ ###追加実験1ソースコード
144
+
145
+ ```C#
146
+
147
+ using System.Diagnostics;
148
+
149
+ using System;
150
+
151
+ namespace tester
152
+
153
+ {
154
+
155
+ class Program
156
+
157
+ {
158
+
159
+ static void Main()
160
+
161
+ {
162
+
163
+ Stopwatch stopwatch1 = new Stopwatch();
164
+
165
+
166
+
167
+ stopwatch1.Restart();
168
+
169
+
170
+
171
+ Console.WriteLine(stopwatch1.Elapsed);
172
+
173
+
174
+
175
+ Stopwatch stopwatch2 = new Stopwatch();
176
+
177
+
178
+
179
+ stopwatch2.Reset();
180
+
181
+
182
+
183
+ Console.WriteLine(stopwatch2.Elapsed);
184
+
185
+
186
+
187
+ Stopwatch stopwatch3 = new Stopwatch();
188
+
189
+
190
+
191
+ stopwatch3.Reset();
192
+
193
+
194
+
195
+ Console.WriteLine(stopwatch3.Elapsed);
196
+
197
+
198
+
199
+ Stopwatch stopwatch4 = new Stopwatch();
200
+
201
+
202
+
203
+ stopwatch4.Reset();
204
+
205
+
206
+
207
+ Console.WriteLine(stopwatch4.Elapsed);
208
+
209
+
210
+
211
+ Stopwatch stopwatch5 = new Stopwatch();
212
+
213
+
214
+
215
+ stopwatch5.Reset();
216
+
217
+
218
+
219
+ Console.WriteLine(stopwatch5.Elapsed);
220
+
221
+ }
222
+
223
+ }
224
+
225
+ }
226
+
227
+ ```
228
+
229
+ ###追加実験1デバッグコンソール
230
+
231
+ ```
232
+
233
+ 00:00:00.0000033
234
+
235
+ 00:00:00
236
+
237
+ 00:00:00
238
+
239
+ 00:00:00
240
+
241
+ 00:00:00
242
+
243
+ ```
244
+
245
+
246
+
247
+ 最初との違いは見られなかった。
248
+
249
+ 早すぎて秒未満が表示されなかった。
250
+
251
+
252
+
253
+ ###追加実験2ソースコード
254
+
255
+ ```C#
256
+
257
+ using System.Collections.Generic;
258
+
259
+ using System.Diagnostics;
260
+
261
+ using System;
262
+
263
+ namespace tester
264
+
265
+ {
266
+
267
+ class Program
268
+
269
+ {
270
+
271
+ static void Main()
272
+
273
+ {
274
+
275
+ List<TimeSpan> timeSpans = new List<TimeSpan>();
276
+
277
+
278
+
279
+ for (int i = 0; i < 5; i++)
280
+
281
+ {
282
+
283
+ Stopwatch stopwatch = new Stopwatch();
284
+
285
+
286
+
287
+ stopwatch.Start();
288
+
289
+
290
+
291
+ timeSpans.Add(stopwatch.Elapsed);
292
+
293
+
294
+
295
+ stopwatch.Stop();
296
+
297
+ }
298
+
299
+
300
+
301
+ foreach(TimeSpan time in timeSpans)
302
+
303
+ {
304
+
305
+ Console.WriteLine(time);
306
+
307
+ }
308
+
309
+ }
310
+
311
+ }
312
+
313
+ }
314
+
315
+ ```
316
+
317
+ ###追加実験2デバッグコンソール
318
+
319
+ ```
320
+
321
+ 00:00:00.0000053
322
+
323
+ 00:00:00.0000001
324
+
325
+ 00:00:00.0000001
326
+
327
+ 00:00:00.0000001
328
+
329
+ 00:00:00.0000001
330
+
331
+ ```
332
+
333
+
334
+
335
+ 最初との違いは見られなかった。
336
+
337
+
338
+
339
+ ###追加実験3ソースコード
340
+
341
+ ```C#
342
+
343
+ using System.Diagnostics;
344
+
345
+ using System;
346
+
347
+ namespace tester
348
+
349
+ {
350
+
351
+ class Program
352
+
353
+ {
354
+
355
+ static void Main()
356
+
357
+ {
358
+
359
+ TimeSpan[] timeSpans = new TimeSpan[5];
360
+
361
+
362
+
363
+ for (int i = 0; i < 5; i++)
364
+
365
+ {
366
+
367
+ Stopwatch stopwatch = new Stopwatch();
368
+
369
+
370
+
371
+ stopwatch.Start();
372
+
373
+
374
+
375
+ timeSpans[i] = stopwatch.Elapsed;
376
+
377
+
378
+
379
+ stopwatch.Stop();
380
+
381
+ }
382
+
383
+
384
+
385
+ foreach(TimeSpan time in timeSpans)
386
+
387
+ {
388
+
389
+ Console.WriteLine(time);
390
+
391
+ }
392
+
393
+ }
394
+
395
+ }
396
+
397
+ }
398
+
399
+ ```
400
+
401
+ ###追加実験3デバッグコンソール
402
+
403
+ ```
404
+
405
+ 00:00:00.0000040
406
+
407
+ 00:00:00
408
+
409
+ 00:00:00.0000001
410
+
411
+ 00:00:00.0000001
412
+
413
+ 00:00:00
414
+
415
+ ```
416
+
417
+
418
+
419
+ 最初との違いは見られなかった。
420
+
421
+
422
+
423
+
424
+
425
+ ###追加実験4ソースコード
426
+
427
+ ```C#
428
+
429
+ 最初のと同じ
430
+
431
+ ```
432
+
433
+ ###追加実験4コンソール
434
+
435
+ ```
436
+
437
+ 00:00:00.0000017
438
+
439
+ 00:00:00.0000001
440
+
441
+ 00:00:00.0000001
442
+
443
+ 00:00:00.0000001
444
+
445
+ 00:00:00
446
+
447
+ ```
448
+
449
+
450
+
451
+ 最初より早いが、はじめはやはり遅い。
452
+
453
+
454
+
455
+ ###追追記(これで解決)
456
+
457
+ radian回答からStopwatchクラスをforより前に使用してからやれば早くなるのではと予想。
458
+
459
+ それで以下のソースコードの実験を行った。
460
+
461
+
462
+
463
+ ###追追加実験ソースコード
464
+
465
+ ```C#
466
+
467
+ using System.Diagnostics;
468
+
469
+ using System;
470
+
471
+ namespace tester
472
+
473
+ {
474
+
475
+ class Program
476
+
477
+ {
478
+
479
+ static void Main()
480
+
481
+ {
482
+
483
+ Stopwatch st = new Stopwatch();
484
+
485
+
486
+
487
+ st.Start();
488
+
489
+
490
+
491
+ _ = st.Elapsed;
492
+
493
+
494
+
495
+ for (int i = 0; i < 5; i++)
496
+
497
+ {
498
+
499
+ Stopwatch stopwatch = new Stopwatch();
500
+
501
+
502
+
503
+ stopwatch.Start();
504
+
505
+
506
+
507
+ Console.WriteLine(stopwatch.Elapsed.ToString());
508
+
509
+ }
510
+
511
+
512
+
513
+ Console.ReadLine();
514
+
515
+ }
516
+
517
+ }
518
+
519
+ }
520
+
521
+ ```
522
+
523
+ ###追追加実験デバッグコンソール
524
+
525
+ ```
526
+
527
+ 00:00:00.0000001
528
+
113
529
  00:00:00.0000002
114
530
 
115
- ```
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
- ###追記。さらに検証実験を行った
126
-
127
- Zuishinさんの意見を取り入れ、追加の実験を行った。
128
-
129
-
130
-
131
- - 行った実験
132
-
133
- 1 - forを使わない。
134
-
135
- 2 - ElapsedをListAddしからWirteLineする。
136
-
137
- 3 - Listではなく配列
138
-
139
- 4 - ビルドする
140
-
141
-
142
-
143
-
144
-
145
- ###追加実験1ソースコード
146
-
147
- ```C#
148
-
149
- using System.Diagnostics;
150
-
151
- using System;
152
-
153
- namespace tester
154
-
155
- {
156
-
157
- class Program
158
-
159
- {
160
-
161
- static void Main()
162
-
163
- {
164
-
165
- Stopwatch stopwatch1 = new Stopwatch();
166
-
167
-
168
-
169
- stopwatch1.Restart();
170
-
171
-
172
-
173
- Console.WriteLine(stopwatch1.Elapsed);
174
-
175
-
176
-
177
- Stopwatch stopwatch2 = new Stopwatch();
178
-
179
-
180
-
181
- stopwatch2.Reset();
182
-
183
-
184
-
185
- Console.WriteLine(stopwatch2.Elapsed);
186
-
187
-
188
-
189
- Stopwatch stopwatch3 = new Stopwatch();
190
-
191
-
192
-
193
- stopwatch3.Reset();
194
-
195
-
196
-
197
- Console.WriteLine(stopwatch3.Elapsed);
198
-
199
-
200
-
201
- Stopwatch stopwatch4 = new Stopwatch();
202
-
203
-
204
-
205
- stopwatch4.Reset();
206
-
207
-
208
-
209
- Console.WriteLine(stopwatch4.Elapsed);
210
-
211
-
212
-
213
- Stopwatch stopwatch5 = new Stopwatch();
214
-
215
-
216
-
217
- stopwatch5.Reset();
218
-
219
-
220
-
221
- Console.WriteLine(stopwatch5.Elapsed);
222
-
223
- }
224
-
225
- }
226
-
227
- }
228
-
229
- ```
230
-
231
- ###追加実験1デバッグコンソール
232
-
233
- ```
234
-
235
- 00:00:00.0000033
236
-
237
- 00:00:00
238
-
239
- 00:00:00
240
-
241
- 00:00:00
242
-
243
- 00:00:00
244
-
245
- ```
246
-
247
-
248
-
249
- 最初との違いは見られなかった。
250
-
251
- 早すぎて秒未満が表示されなかった。
252
-
253
-
254
-
255
- ###追加実験2ソースコード
256
-
257
- ```C#
258
-
259
- using System.Collections.Generic;
260
-
261
- using System.Diagnostics;
262
-
263
- using System;
264
-
265
- namespace tester
266
-
267
- {
268
-
269
- class Program
270
-
271
- {
272
-
273
- static void Main()
274
-
275
- {
276
-
277
- List<TimeSpan> timeSpans = new List<TimeSpan>();
278
-
279
-
280
-
281
- for (int i = 0; i < 5; i++)
282
-
283
- {
284
-
285
- Stopwatch stopwatch = new Stopwatch();
286
-
287
-
288
-
289
- stopwatch.Start();
290
-
291
-
292
-
293
- timeSpans.Add(stopwatch.Elapsed);
294
-
295
-
296
-
297
- stopwatch.Stop();
298
-
299
- }
300
-
301
-
302
-
303
- foreach(TimeSpan time in timeSpans)
304
-
305
- {
306
-
307
- Console.WriteLine(time);
308
-
309
- }
310
-
311
- }
312
-
313
- }
314
-
315
- }
316
-
317
- ```
318
-
319
- ###追加実験2バッグコンソール
320
-
321
- ```
322
-
323
- 00:00:00.0000053
324
-
325
- 00:00:00.0000001
326
-
327
- 00:00:00.0000001
328
-
329
- 00:00:00.0000001
330
-
331
- 00:00:00.0000001
332
-
333
- ```
334
-
335
-
336
-
337
- 最初との違いは見られなかった。
338
-
339
-
340
-
341
- ###追加実験3ソースコード
342
-
343
- ```C#
344
-
345
- using System.Diagnostics;
346
-
347
- using System;
348
-
349
- namespace tester
350
-
351
- {
352
-
353
- class Program
354
-
355
- {
356
-
357
- static void Main()
358
-
359
- {
360
-
361
- TimeSpan[] timeSpans = new TimeSpan[5];
362
-
363
-
364
-
365
- for (int i = 0; i < 5; i++)
366
-
367
- {
368
-
369
- Stopwatch stopwatch = new Stopwatch();
370
-
371
-
372
-
373
- stopwatch.Start();
374
-
375
-
376
-
377
- timeSpans[i] = stopwatch.Elapsed;
378
-
379
-
380
-
381
- stopwatch.Stop();
382
-
383
- }
384
-
385
-
386
-
387
- foreach(TimeSpan time in timeSpans)
388
-
389
- {
390
-
391
- Console.WriteLine(time);
392
-
393
- }
394
-
395
- }
396
-
397
- }
398
-
399
- }
400
-
401
- ```
402
-
403
- ###追加実験3バッグコンソール
404
-
405
- ```
406
-
407
- 00:00:00.0000040
408
-
409
- 00:00:00
410
-
411
- 00:00:00.0000001
412
-
413
- 00:00:00.0000001
414
-
415
- 00:00:00
416
-
417
- ```
418
-
419
-
420
-
421
- 最初との違いは見られなかった。
422
-
423
-
424
-
425
-
426
-
427
- ###追加実験4ソースコード
428
-
429
- ```C#
430
-
431
- 最初のと同じ
432
-
433
- ```
434
-
435
- ###追加実験4コンソール
436
-
437
- ```
438
-
439
- 00:00:00.0000017
440
-
441
- 00:00:00.0000001
442
-
443
- 00:00:00.0000001
444
-
445
- 00:00:00.0000001
446
-
447
- 00:00:00
448
-
449
- ```
450
-
451
-
452
-
453
- 最初より早いが、はじめはやはり遅い。
454
-
455
-
531
+ 00:00:00.0000001
532
+
533
+ 00:00:00.0000002
534
+
535
+ 00:00:00.0000002
536
+
537
+ ```
538
+
539
+
540
+
541
+ こ・れ・は......!
542
+
543
+
544
+
545
+ 初回が早くなった。
546
+
547
+ 今までのソースコードはJITコンパイルを初回でやていると考えれば、今回のソースコードではforの前にやっているのでその分の処理時間が省かれと考えられる。
548
+
549
+
550
+
551
+ これらより、反復処理ではじめの処理があとの比べ遅い訳はJITコンパイルを初回で行っているため、初回の処理が時間がかかったいえる。
552
+
553
+
554
+
555
+ 今回の問題にご協力いただいた皆さんありがとうございました
456
556
 
457
557
  ### 環境
458
558
 

2

誤字修正

2020/09/12 13:22

投稿

sinonome
sinonome

スコア8

test CHANGED
File without changes
test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
 
130
130
 
131
- - リスト
131
+ - 行った実験
132
132
 
133
133
  1 - forを使わない。
134
134
 

1

新たな検証実験を行った

2020/09/11 14:05

投稿

sinonome
sinonome

スコア8

test CHANGED
File without changes
test CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
  {
68
68
 
69
- for (int i = 0; i <= 5; i++)
69
+ for (int i = 0; i < 5; i++)
70
70
 
71
71
  {
72
72
 
@@ -116,6 +116,344 @@
116
116
 
117
117
 
118
118
 
119
+
120
+
121
+
122
+
123
+
124
+
125
+ ###追記。さらに検証実験を行った
126
+
127
+ Zuishinさんの意見を取り入れ、追加の実験を行った。
128
+
129
+
130
+
131
+ - リスト
132
+
133
+ 1 - forを使わない。
134
+
135
+ 2 - ElapsedをListにAddしてあとからWirteLineする。
136
+
137
+ 3 - Listではなく配列
138
+
139
+ 4 - ビルドする。
140
+
141
+
142
+
143
+
144
+
145
+ ###追加実験1ソースコード
146
+
147
+ ```C#
148
+
149
+ using System.Diagnostics;
150
+
151
+ using System;
152
+
153
+ namespace tester
154
+
155
+ {
156
+
157
+ class Program
158
+
159
+ {
160
+
161
+ static void Main()
162
+
163
+ {
164
+
165
+ Stopwatch stopwatch1 = new Stopwatch();
166
+
167
+
168
+
169
+ stopwatch1.Restart();
170
+
171
+
172
+
173
+ Console.WriteLine(stopwatch1.Elapsed);
174
+
175
+
176
+
177
+ Stopwatch stopwatch2 = new Stopwatch();
178
+
179
+
180
+
181
+ stopwatch2.Reset();
182
+
183
+
184
+
185
+ Console.WriteLine(stopwatch2.Elapsed);
186
+
187
+
188
+
189
+ Stopwatch stopwatch3 = new Stopwatch();
190
+
191
+
192
+
193
+ stopwatch3.Reset();
194
+
195
+
196
+
197
+ Console.WriteLine(stopwatch3.Elapsed);
198
+
199
+
200
+
201
+ Stopwatch stopwatch4 = new Stopwatch();
202
+
203
+
204
+
205
+ stopwatch4.Reset();
206
+
207
+
208
+
209
+ Console.WriteLine(stopwatch4.Elapsed);
210
+
211
+
212
+
213
+ Stopwatch stopwatch5 = new Stopwatch();
214
+
215
+
216
+
217
+ stopwatch5.Reset();
218
+
219
+
220
+
221
+ Console.WriteLine(stopwatch5.Elapsed);
222
+
223
+ }
224
+
225
+ }
226
+
227
+ }
228
+
229
+ ```
230
+
231
+ ###追加実験1デバッグコンソール
232
+
233
+ ```
234
+
235
+ 00:00:00.0000033
236
+
237
+ 00:00:00
238
+
239
+ 00:00:00
240
+
241
+ 00:00:00
242
+
243
+ 00:00:00
244
+
245
+ ```
246
+
247
+
248
+
249
+ 最初との違いは見られなかった。
250
+
251
+ 早すぎて秒未満が表示されなかった。
252
+
253
+
254
+
255
+ ###追加実験2ソースコード
256
+
257
+ ```C#
258
+
259
+ using System.Collections.Generic;
260
+
261
+ using System.Diagnostics;
262
+
263
+ using System;
264
+
265
+ namespace tester
266
+
267
+ {
268
+
269
+ class Program
270
+
271
+ {
272
+
273
+ static void Main()
274
+
275
+ {
276
+
277
+ List<TimeSpan> timeSpans = new List<TimeSpan>();
278
+
279
+
280
+
281
+ for (int i = 0; i < 5; i++)
282
+
283
+ {
284
+
285
+ Stopwatch stopwatch = new Stopwatch();
286
+
287
+
288
+
289
+ stopwatch.Start();
290
+
291
+
292
+
293
+ timeSpans.Add(stopwatch.Elapsed);
294
+
295
+
296
+
297
+ stopwatch.Stop();
298
+
299
+ }
300
+
301
+
302
+
303
+ foreach(TimeSpan time in timeSpans)
304
+
305
+ {
306
+
307
+ Console.WriteLine(time);
308
+
309
+ }
310
+
311
+ }
312
+
313
+ }
314
+
315
+ }
316
+
317
+ ```
318
+
319
+ ###追加実験2バッグコンソール
320
+
321
+ ```
322
+
323
+ 00:00:00.0000053
324
+
325
+ 00:00:00.0000001
326
+
327
+ 00:00:00.0000001
328
+
329
+ 00:00:00.0000001
330
+
331
+ 00:00:00.0000001
332
+
333
+ ```
334
+
335
+
336
+
337
+ 最初との違いは見られなかった。
338
+
339
+
340
+
341
+ ###追加実験3ソースコード
342
+
343
+ ```C#
344
+
345
+ using System.Diagnostics;
346
+
347
+ using System;
348
+
349
+ namespace tester
350
+
351
+ {
352
+
353
+ class Program
354
+
355
+ {
356
+
357
+ static void Main()
358
+
359
+ {
360
+
361
+ TimeSpan[] timeSpans = new TimeSpan[5];
362
+
363
+
364
+
365
+ for (int i = 0; i < 5; i++)
366
+
367
+ {
368
+
369
+ Stopwatch stopwatch = new Stopwatch();
370
+
371
+
372
+
373
+ stopwatch.Start();
374
+
375
+
376
+
377
+ timeSpans[i] = stopwatch.Elapsed;
378
+
379
+
380
+
381
+ stopwatch.Stop();
382
+
383
+ }
384
+
385
+
386
+
387
+ foreach(TimeSpan time in timeSpans)
388
+
389
+ {
390
+
391
+ Console.WriteLine(time);
392
+
393
+ }
394
+
395
+ }
396
+
397
+ }
398
+
399
+ }
400
+
401
+ ```
402
+
403
+ ###追加実験3バッグコンソール
404
+
405
+ ```
406
+
407
+ 00:00:00.0000040
408
+
409
+ 00:00:00
410
+
411
+ 00:00:00.0000001
412
+
413
+ 00:00:00.0000001
414
+
415
+ 00:00:00
416
+
417
+ ```
418
+
419
+
420
+
421
+ 最初との違いは見られなかった。
422
+
423
+
424
+
425
+
426
+
427
+ ###追加実験4ソースコード
428
+
429
+ ```C#
430
+
431
+ 最初のと同じ
432
+
433
+ ```
434
+
435
+ ###追加実験4コンソール
436
+
437
+ ```
438
+
439
+ 00:00:00.0000017
440
+
441
+ 00:00:00.0000001
442
+
443
+ 00:00:00.0000001
444
+
445
+ 00:00:00.0000001
446
+
447
+ 00:00:00
448
+
449
+ ```
450
+
451
+
452
+
453
+ 最初より早いが、はじめはやはり遅い。
454
+
455
+
456
+
119
457
  ### 環境
120
458
 
121
459
  visual studio 2019