teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

誤時修正

2020/09/12 13:24

投稿

sinonome
sinonome

スコア8

title CHANGED
File without changes
body CHANGED
@@ -226,7 +226,7 @@
226
226
  最初より早いが、はじめはやはり遅い。
227
227
 
228
228
  ###追追記(これで解決)
229
- radian回答からStopwatchクラスをforより前に使用してからやれば早くなるのではと予想。
229
+ radianさんの回答からStopwatchクラスをforより前に使用してからやれば早くなるのではと予想。
230
230
  それで以下のソースコードの実験を行った。
231
231
 
232
232
  ###追追加実験ソースコード

3

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

2020/09/12 13:24

投稿

sinonome
sinonome

スコア8

title CHANGED
File without changes
body CHANGED
@@ -54,7 +54,6 @@
54
54
  00:00:00.0000002
55
55
  00:00:00.0000001
56
56
  00:00:00.0000002
57
- 00:00:00.0000002
58
57
  ```
59
58
 
60
59
 
@@ -157,7 +156,7 @@
157
156
  }
158
157
  }
159
158
  ```
160
- ###追加実験2バッグコンソール
159
+ ###追加実験2バッグコンソール
161
160
  ```
162
161
  00:00:00.0000053
163
162
  00:00:00.0000001
@@ -199,7 +198,7 @@
199
198
  }
200
199
  }
201
200
  ```
202
- ###追加実験3バッグコンソール
201
+ ###追加実験3バッグコンソール
203
202
  ```
204
203
  00:00:00.0000040
205
204
  00:00:00
@@ -226,6 +225,57 @@
226
225
 
227
226
  最初より早いが、はじめはやはり遅い。
228
227
 
228
+ ###追追記(これで解決)
229
+ radian回答からStopwatchクラスをforより前に使用してからやれば早くなるのではと予想。
230
+ それで以下のソースコードの実験を行った。
231
+
232
+ ###追追加実験ソースコード
233
+ ```C#
234
+ using System.Diagnostics;
235
+ using System;
236
+ namespace tester
237
+ {
238
+ class Program
239
+ {
240
+ static void Main()
241
+ {
242
+ Stopwatch st = new Stopwatch();
243
+
244
+ st.Start();
245
+
246
+ _ = st.Elapsed;
247
+
248
+ for (int i = 0; i < 5; i++)
249
+ {
250
+ Stopwatch stopwatch = new Stopwatch();
251
+
252
+ stopwatch.Start();
253
+
254
+ Console.WriteLine(stopwatch.Elapsed.ToString());
255
+ }
256
+
257
+ Console.ReadLine();
258
+ }
259
+ }
260
+ }
261
+ ```
262
+ ###追追加実験デバッグコンソール
263
+ ```
264
+ 00:00:00.0000001
265
+ 00:00:00.0000002
266
+ 00:00:00.0000001
267
+ 00:00:00.0000002
268
+ 00:00:00.0000002
269
+ ```
270
+
271
+ こ・れ・は......!
272
+
273
+ 初回が早くなった。
274
+ 今までのソースコードはJITコンパイルを初回でやっていると考えれば、今回のソースコードではforの前にやっているのでその分の処理時間が省かれたと考えられる。
275
+
276
+ これらより、反復処理ではじめの処理があとのに比べて遅い訳はJITコンパイルを初回で行っているため、初回の処理が時間がかかったといえる。
277
+
278
+ 今回の問題にご協力いただいた皆さんありがとうございました。
229
279
  ### 環境
230
280
  visual studio 2019
231
281
  Microsoft.NETCore.App 3.1.1 コンソールアプリケーション

2

誤字修正

2020/09/12 13:22

投稿

sinonome
sinonome

スコア8

title CHANGED
File without changes
body CHANGED
@@ -63,7 +63,7 @@
63
63
  ###追記。さらに検証実験を行った
64
64
  Zuishinさんの意見を取り入れ、追加の実験を行った。
65
65
 
66
- - リスト
66
+ - 行った実験
67
67
  1 - forを使わない。
68
68
  2 - ElapsedをListにAddしてあとからWirteLineする。
69
69
  3 - Listではなく配列

1

新たな検証実験を行った

2020/09/11 14:05

投稿

sinonome
sinonome

スコア8

title CHANGED
File without changes
body CHANGED
@@ -32,7 +32,7 @@
32
32
  {
33
33
  static void Main()
34
34
  {
35
- for (int i = 0; i <= 5; i++)
35
+ for (int i = 0; i < 5; i++)
36
36
  {
37
37
  Stopwatch stopwatch = new Stopwatch();
38
38
 
@@ -57,6 +57,175 @@
57
57
  00:00:00.0000002
58
58
  ```
59
59
 
60
+
61
+
62
+
63
+ ###追記。さらに検証実験を行った
64
+ Zuishinさんの意見を取り入れ、追加の実験を行った。
65
+
66
+ - リスト
67
+ 1 - forを使わない。
68
+ 2 - ElapsedをListにAddしてあとからWirteLineする。
69
+ 3 - Listではなく配列
70
+ 4 - ビルドする。
71
+
72
+
73
+ ###追加実験1ソースコード
74
+ ```C#
75
+ using System.Diagnostics;
76
+ using System;
77
+ namespace tester
78
+ {
79
+ class Program
80
+ {
81
+ static void Main()
82
+ {
83
+ Stopwatch stopwatch1 = new Stopwatch();
84
+
85
+ stopwatch1.Restart();
86
+
87
+ Console.WriteLine(stopwatch1.Elapsed);
88
+
89
+ Stopwatch stopwatch2 = new Stopwatch();
90
+
91
+ stopwatch2.Reset();
92
+
93
+ Console.WriteLine(stopwatch2.Elapsed);
94
+
95
+ Stopwatch stopwatch3 = new Stopwatch();
96
+
97
+ stopwatch3.Reset();
98
+
99
+ Console.WriteLine(stopwatch3.Elapsed);
100
+
101
+ Stopwatch stopwatch4 = new Stopwatch();
102
+
103
+ stopwatch4.Reset();
104
+
105
+ Console.WriteLine(stopwatch4.Elapsed);
106
+
107
+ Stopwatch stopwatch5 = new Stopwatch();
108
+
109
+ stopwatch5.Reset();
110
+
111
+ Console.WriteLine(stopwatch5.Elapsed);
112
+ }
113
+ }
114
+ }
115
+ ```
116
+ ###追加実験1デバッグコンソール
117
+ ```
118
+ 00:00:00.0000033
119
+ 00:00:00
120
+ 00:00:00
121
+ 00:00:00
122
+ 00:00:00
123
+ ```
124
+
125
+ 最初との違いは見られなかった。
126
+ 早すぎて秒未満が表示されなかった。
127
+
128
+ ###追加実験2ソースコード
129
+ ```C#
130
+ using System.Collections.Generic;
131
+ using System.Diagnostics;
132
+ using System;
133
+ namespace tester
134
+ {
135
+ class Program
136
+ {
137
+ static void Main()
138
+ {
139
+ List<TimeSpan> timeSpans = new List<TimeSpan>();
140
+
141
+ for (int i = 0; i < 5; i++)
142
+ {
143
+ Stopwatch stopwatch = new Stopwatch();
144
+
145
+ stopwatch.Start();
146
+
147
+ timeSpans.Add(stopwatch.Elapsed);
148
+
149
+ stopwatch.Stop();
150
+ }
151
+
152
+ foreach(TimeSpan time in timeSpans)
153
+ {
154
+ Console.WriteLine(time);
155
+ }
156
+ }
157
+ }
158
+ }
159
+ ```
160
+ ###追加実験2バッグコンソール
161
+ ```
162
+ 00:00:00.0000053
163
+ 00:00:00.0000001
164
+ 00:00:00.0000001
165
+ 00:00:00.0000001
166
+ 00:00:00.0000001
167
+ ```
168
+
169
+ 最初との違いは見られなかった。
170
+
171
+ ###追加実験3ソースコード
172
+ ```C#
173
+ using System.Diagnostics;
174
+ using System;
175
+ namespace tester
176
+ {
177
+ class Program
178
+ {
179
+ static void Main()
180
+ {
181
+ TimeSpan[] timeSpans = new TimeSpan[5];
182
+
183
+ for (int i = 0; i < 5; i++)
184
+ {
185
+ Stopwatch stopwatch = new Stopwatch();
186
+
187
+ stopwatch.Start();
188
+
189
+ timeSpans[i] = stopwatch.Elapsed;
190
+
191
+ stopwatch.Stop();
192
+ }
193
+
194
+ foreach(TimeSpan time in timeSpans)
195
+ {
196
+ Console.WriteLine(time);
197
+ }
198
+ }
199
+ }
200
+ }
201
+ ```
202
+ ###追加実験3バッグコンソール
203
+ ```
204
+ 00:00:00.0000040
205
+ 00:00:00
206
+ 00:00:00.0000001
207
+ 00:00:00.0000001
208
+ 00:00:00
209
+ ```
210
+
211
+ 最初との違いは見られなかった。
212
+
213
+
214
+ ###追加実験4ソースコード
215
+ ```C#
216
+ 最初のと同じ
217
+ ```
218
+ ###追加実験4コンソール
219
+ ```
220
+ 00:00:00.0000017
221
+ 00:00:00.0000001
222
+ 00:00:00.0000001
223
+ 00:00:00.0000001
224
+ 00:00:00
225
+ ```
226
+
227
+ 最初より早いが、はじめはやはり遅い。
228
+
60
229
  ### 環境
61
230
  visual studio 2019
62
231
  Microsoft.NETCore.App 3.1.1 コンソールアプリケーション