回答編集履歴

2

文言

2021/03/12 06:12

投稿

int32_t
int32_t

スコア20672

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

全面的に書き換え

2021/03/12 06:12

投稿

int32_t
int32_t

スコア20672

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
- std::vector<byte> tmp(StageSize.x);
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
- ```