整数値だろうがboolean値だろうが、大差ないでしょう。
そこまで考えなければならない状況であれば、私だったらまずJSON形式で保存しないで別の方法を考えます。
そちらの方が効率的でしょう。
もしJSON形式でなければならないのであれば、ビット演算で複数のフラグを一つの整数値にまとめて保存します。
テキスト形式だから単純に1/(ビット数)というわけにはいかないでしょうけど、それなりにパフォーマンスやデータ量の削減にはなるんじゃないですか?
そもそも本当に「パフォーマンスやデータ量に影響を及ぼす」ほどの大量のフラグなんですか?
この手の質問にありがちですが、「なんとなく多くなりそうだし、とりあえず早くしなきゃ」と安直に考えていませんか?
ゲームのセーブデータごときでそれほど大量なデータが必要になる事はそうそう無いと思いますが、もしそのようなことになりそうだと思うのであれば、まず「大量のフラグ」というのが実際のどれぐらいの量になるか、正確でないまでもおおよその検討をつけ、その量に対してどれぐらいパフォーマンス負荷やデータ量になるか検証し、それで問題があれば対策を検討するようにしたほうがいいと思います。
プログラマは、ユーザを第一に考えるべきです。
ユーザにとって大したメリットのない事にこだわるのは、プログラマの自己満足でしかありません。
程々にしたほうがいいでしょう。
というわけで、以下自己満足です(笑)
ちょっとソースを眺めてみました。
(SimpleJSONは使ったことがなかったのですが、これですよね?)
整数値・boolean値の判定・変換は、以下の箇所のようです。
cs
1 static JSONData Numberize (string token)
2 {
3 bool flag = false;
4 int integer = 0;
5 double real = 0;
6
7 if (int.TryParse (token, out integer)) {
8 return new JSONData (integer);
9 }
10
11 if (double.TryParse (token, out real)) {
12 return new JSONData (real);
13 }
14
15 if (bool.TryParse (token, out flag)) {
16 return new JSONData (flag);
17 }
18
19 throw new NotImplementedException (token);
20 }
21
これを見る限り、整数値で持ったほうが早そうですね。
一応、根拠を上げておきますと、
まずNumberizeというメソッドが何をしているかですが、
- トークンの整数値への変換を試み、成功すれば整数値を示すJSONDataを返す。
- トークンの小数値への変換を試み、成功すれば小数値を示すJSONDataを返す。
- トークンのboolean値への変換を試み、成功すればboolean地を示すJSONDataを返す。
- 全てダメならば、例外をスロー。
となっています。
つまり、トークンが整数値であれば、1.の変換処理のみで完結しますが、boolean値であれば、1.2.3.の3つの変換処理を行う事になるので、整数値が渡された場合よりも処理が冗長になるであろう、という考えです。
まぁ、「整数値とboolean値、どちらが処理が早い?」と聞かれればこう答えますが、だからといってboolean値を使わずに整数値を使おう、という根拠としては薄いと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/16 01:11
2016/06/16 14:43
2016/06/16 14:52