回答編集履歴
2
文言
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
1
|
`MapChip` の生成・コピーにとてもコストがかかっていませんか?
|
2
2
|
|
3
3
|
以前の質問で見たコードのままだと、生成するたびにファイル読み込みしてたと思います。
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
とりあえず、ループの前に「`mStage.reserve(StageSize.x * StageSize.y);`」と書くことで `MapChip`のコピー回数をぐっと減らせるかもしれません。あと、`MapChip`をコピー不能にして`mStage`をスマートポインタのベクタにしたほうが速くなると思います。
|
1
全面的に書き換え
test
CHANGED
@@ -1,29 +1,3 @@
|
|
1
|
-
|
1
|
+
`MapChip` の生成・コピーにとてもコストがかかっていませんか?
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
`Stage::LoadStage()`が想定外に重いというのが確実であるなら、「頻繁なメモリ確保を避けるために、`std::vector`のサイズを予約する」「頻繁な関数コールを避けるために、できるだけまとめて `fread()` する」あたりで速くなる可能性があります。
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
```c++
|
10
|
-
|
11
|
-
Stage_Grid->reserve(StateSize.y); // 容量予約
|
12
|
-
|
13
|
-
for (int y = 0; y < StageSize.y; ++y) {
|
14
|
-
|
15
|
-
// サイズ指定コンストラクタを使う
|
16
|
-
|
17
|
-
|
3
|
+
以前の質問で見たコードのままだと、生成するたびにファイル読み込みしてたと思います。
|
18
|
-
|
19
|
-
// StageSize.xぶん一度に読み込み
|
20
|
-
|
21
|
-
fread(tmp.data(), sizeof(byte), tmp.size(), fp);
|
22
|
-
|
23
|
-
// コピー回避のためムーブする
|
24
|
-
|
25
|
-
Stage_Grid->push_back(std::move(tmp));
|
26
|
-
|
27
|
-
}
|
28
|
-
|
29
|
-
```
|