Re: キャッシュに読み書きしたい ( No.1 ) |
- 名前:管理人 日時:2018/02/15 02:43
> Android版で起動するたびにロードをするのは時間がかかるなと思い
> キャッシュを使って一部動作を速くしたいと思っているのですが、
> DXライブラリでキャッシュにデータを読み書きすることは可能でしょうか?
キャッシュですか・・・?
キャッシュも普通に LoadGraph などをするときと同じ内蔵ストレージに記憶されるので、
キャッシュを使用しても特に速くならないと思います
( キャッシュで速くなるのは、データをネットワークからダウンロードするタイプのアプリで、
毎回ネット上からデータをダウンロードせず、内蔵ストレージにダウンロードしたデータを保存しておく( キャッシュしておく )と
次回から内蔵ストレージからデータを読み込めるので速くなる、というわけです )
> 現時点でiOS版のDXライブラリは予定されていますでしょうか?
はい、現在作成中です
完成予定は 2018年8月 から 2019年8月 までのどこかになると思います
( 予定外のことが発生して『1ヶ月間何も作業できなかった・・・』ということも結構あるので・・・ )
> やはりAndroidとは仕様が異なるため実装は難しいのでしょうか...?
いえ、Android は C++ とはかなり異なる Java が基本的な言語なのに対して、
iOS は C++ に近い Objective-C や Swift が基本的な言語なので、実装自体は iOS の方が易しいです
ただ、Android と異なり Windows も VisualStudio も使えないので、使い慣れない Mac OS や X-Code に四苦八苦しています・・・
( 漸く慣れてきましたが・・・ )
|
Re: キャッシュに読み書きしたい ( No.2 ) |
- 名前:BayLeaf 日時:2018/02/15 08:03
> キャッシュも普通に LoadGraph などをするときと同じ内蔵ストレージに記憶されるので、
> キャッシュを使用しても特に速くならないと思います
>
> ( キャッシュで速くなるのは、データをネットワークからダウンロードするタイプのアプリで、
> 毎回ネット上からデータをダウンロードせず、内蔵ストレージにダウンロードしたデータを保存しておく( キャッシュしておく )と
> 次回から内蔵ストレージからデータを読み込めるので速くなる、というわけです )
詳しいご説明ありがとうございます。
どうやって処理をすればロード等が速くできるのかなと考えていたところ、
キャッシュ(正確には cache フォルダにアクセス)が思い浮かんだのですが、見当違いな話をしてしまって済みません。
処理を速くする方法を色々模索しているのですが、例えば
DXライブラリで使わない機能をシャウトすることで処理が速くなったり動作が軽くなったりするのでしょうか?
> はい、現在作成中です
> 完成予定は 2018年8月 から 2019年8月 までのどこかになると思います
> ( 予定外のことが発生して『1ヶ月間何も作業できなかった・・・』ということも結構あるので・・・ )
作成していることにも驚きましたが、時期が速いですね!
もしできましたらすぐさまダウンロードさせていただいて開発を行うので、頑張ってください。
自分の目論見ですとDXライブラリのヘッダーにある _NN_ で始まる
あのマクロの開発環境を整備していて iOS 版ができないのかなと思っていました。(外部への考慮のため名前は出しません)
もし _NN_ マクロの開発環境がDXライブラリで整備できたのなら、
準備だけはしているので(開発機材を購入できるようにさえなれば)すぐに開発ができると思います。
> いえ、Android は C++ とはかなり異なる Java が基本的な言語なのに対して、
> iOS は C++ に近い Objective-C や Swift が基本的な言語なので、実装自体は iOS の方が易しいです
> ただ、Android と異なり Windows も VisualStudio も使えないので、使い慣れない Mac OS や X-Code に四苦八苦しています・・・
> ( 漸く慣れてきましたが・・・ )
個人的に Java のほうはある程度できるのですが、
Objective-C や Swift に関しては全く分からないため、実装が難しいのかなと思っていました。
Mac OS はかなり使い勝手が違いますよね、友人のを借りたことはありますが、
Windows とかなり感覚が違ったのでいつまで経っても進歩していないという…。
因みになんですが、Android版とコードに関してどのくらい共有できそうですか?
もし結構な関数が共有できた場合は、Androidとついている関数名を変更する必要が出てきそうですよね。
 |
Re: キャッシュに読み書きしたい ( No.3 ) |
- 名前:管理人 日時:2018/02/16 03:22
> 処理を速くする方法を色々模索しているのですが、例えば
> DXライブラリで使わない機能をシャウトすることで処理が速くなったり動作が軽くなったりするのでしょうか?
いえ、使わない機能が内部で勝手に動作しているということはありませんので、使わない機能を無効にしても動作が軽くなるということはありません・・・
どのような処理を速くされたいのでしょうか?
> 作成していることにも驚きましたが、時期が速いですね!
> もしできましたらすぐさまダウンロードさせていただいて開発を行うので、頑張ってください。
ありがとうございます、頑張ります (^ ^
( Androidで時間が掛かった OpenGL ES のコードを流用できるのでそのぶん早く完成すると信じたい・・・ )
> 自分の目論見ですとDXライブラリのヘッダーにある _NN_ で始まる
> あのマクロの開発環境を整備していて iOS 版ができないのかなと思っていました。(外部への考慮のため名前は出しません)
一応ノーコメントにしておきます
> 因みになんですが、Android版とコードに関してどのくらい共有できそうですか?
> もし結構な関数が共有できた場合は、Androidとついている関数名を変更する必要が出てきそうですよね。
DXライブラリの基本的な機能( グラフィック、サウンド、タッチスクリーン )はほぼ共有できると思いますが、
携帯端末特有の機能( 加速度センサー、GPS、通知機能 )は共有できるかどうかはまだちょっと分かりません
|
Re: キャッシュに読み書きしたい ( No.4 ) |
- 名前:BayLeaf 日時:2018/02/19 08:43
遅くなってしまい済みません。
> いえ、使わない機能が内部で勝手に動作しているということはありませんので、使わない機能を無効にしても動作が軽くなるということはありません・・・
> どのような処理を速くされたいのでしょうか?
ロード関連の処理を速くしたいと考えています。
現在はほとんどを非同期でロードしているのですが、
それでもデータ数が多くなると処理が重くなるように感じています(これは仕方のないことですけれども)。
単純にロード箇所を分ければ良いのですが、今後のバグ調査が大変になるためそこまで器用なプログラムを書いていません...。
なので、いくつか質問させてください。(多くて済みません)
1. DXライブラリでログのように内部で処理しているもののうち
ログ含めてどのくらいの処理を削ることができるのでしょうか?
(把握していない機能が多いので上記のみの一覧があったらなと思うのですが)
2. 画像や音声データをセーブデータとして持たせておいて、
再起動時のロードを直接セーブデータから行うことは可能でしょうか?
3. 非同期処理における同時処理の上限数は決まっているのでしょうか?
また、この上限数を設定することは可能でしょうか?
(非同期処理中も操作をしているためできるだけ負荷を減らしたいです)
4. SetCreateSoundDataType (再生形式変更)でストリーム再生にしていた場合、
再生前のメモリには何%程度の情報が読み込まれていますか?
せっかくなのでもう一つお聞きしたいのですが、
標準関数のうち、fopen_s が Android 版で使えないのですが、
何か心当たりはありますでしょうか?(fopen は使うことができます)
そのため、マクロを使い Windows 版とで処理を分けているのですが、
違和感のあるソースコードになってしまっています。
また、fopen 関連の代わりに FileRead_open 関連(非同期処理もできるようなので)を使用した方がよろしいのでしょうか?
上記の違いもあればお願いします。
> DXライブラリの基本的な機能( グラフィック、サウンド、タッチスクリーン )はほぼ共有できると思いますが、
>携帯端末特有の機能( 加速度センサー、GPS、通知機能 )は共有できるかどうかはまだちょっと分かりません
了解しました。では、それらを念頭に開発を進めておきます。
開発している分は Windows 基準でも Android 基準でも実行できるようにしているので
恐らく大丈夫かなとは思っています。
 |
Re: キャッシュに読み書きしたい ( No.5 ) |
- 名前:管理人 日時:2018/02/20 00:52
> 1. DXライブラリでログのように内部で処理しているもののうち
> ログ含めてどのくらいの処理を削ることができるのでしょうか?
> (把握していない機能が多いので上記のみの一覧があったらなと思うのですが)
読み込み速度に関わるものでしたら削れる処理はありません
不要な処理はしていませんので・・・
> 2. 画像や音声データをセーブデータとして持たせておいて、
> 再起動時のロードを直接セーブデータから行うことは可能でしょうか?
できません
仮にそれをしたとしても、内蔵ストレージから読み込むことに変わりはないので
読み込み速度は殆ど変わらないと思います
> 3. 非同期処理における同時処理の上限数は決まっているのでしょうか?
> また、この上限数を設定することは可能でしょうか?
> (非同期処理中も操作をしているためできるだけ負荷を減らしたいです)
デフォルトでは Android では同時に読み込みを行う数は 2 で固定、Windowsの場合は
プロセッサのコア数などによって変化します
以下の関数を DxLib_Init の前に呼ぶことで非同期読み込みで同時に行う読み込み処理の数を変更することができます
// 非同期読み込み処理を行うスレッドの数を設定する( ThreadNum に指定できる数は 1 〜 32 )
int SetASyncLoadThreadNum( int ThreadNum ) ;
数を大きくすればするほど同時に行われる読み込み処理の数が増えるので非同期読み込みが早く完了しますが、
その分メインスレッドの処理に影響を与える割合が高くなります( 処理落ちしてしまうなど )
> 4. SetCreateSoundDataType (再生形式変更)でストリーム再生にしていた場合、
> 再生前のメモリには何%程度の情報が読み込まれていますか?
Windows では 13秒分、Androidでは 1秒分のサウンドデータを先行して読み込んでいます
( Windows では HDD がスリープ状態になることがあるので、HDD が起動して読み込みが可能になるまでの間に
再生用のサウンドデータが途切れないようにするために長めになっています )
> 標準関数のうち、fopen_s が Android 版で使えないのですが、
> 何か心当たりはありますでしょうか?(fopen は使うことができます)
Android の C言語の標準関数には fopen_s が無いので使用できません
> また、fopen 関連の代わりに FileRead_open 関連(非同期処理もできるようなので)を使用した方がよろしいのでしょうか?
FileRead_open を使用しなければならないということはありませんので、
必要に応じて使用してください( 非同期読み込みをしたい場合や、DXアーカイブ内のファイルを読み込みたい場合など )
 |
Re: キャッシュに読み書きしたい ( No.6 ) |
- 名前:BayLeaf 日時:2018/02/20 12:29
色々とありがとうございます。
書いているうちに糸口が見えてきたので以下の質問のみにします。
> Windows では 13秒分、Androidでは 1秒分のサウンドデータを先行して読み込んでいます
この秒数を指定することは可能でしょうか?
また、上記秒数未満の音声を読み込んだ場合はどうなるのでしょうか?
(その場合ストリーム再生にしなければ良いのですが、念のため聞いておきます)
-----------------------------------------------------------------------------
> 読み込み速度に関わるものでしたら削れる処理はありません
> 不要な処理はしていませんので・・・
なるほど、読み込みに影響する処理は特にないのですね。
> デフォルトでは Android では同時に読み込みを行う数は 2 で固定、Windowsの場合は
> プロセッサのコア数などによって変化します
>
> 以下の関数を DxLib_Init の前に呼ぶことで非同期読み込みで同時に行う読み込み処理の数を変更することができます
Windows版で非同期処理中に処理落ちがあって
少し気になっていたのでバランスを考えながら変更してみます。
> Windows では 13秒分、Androidでは 1秒分のサウンドデータを先行して読み込んでいます
> ( Windows では HDD がスリープ状態になることがあるので、HDD が起動して読み込みが可能になるまでの間に
> 再生用のサウンドデータが途切れないようにするために長めになっています )
ありがとうございます、これは個人的にかなり有用な情報です。
Windows と Android で何となく感覚が違っていたので…そういう仕様だったのですね。
> Android の C言語の標準関数には fopen_s が無いので使用できません
分かりました。そもそもないとは思いませんでした。
> FileRead_open を使用しなければならないということはありませんので、
> 必要に応じて使用してください( 非同期読み込みをしたい場合や、DXアーカイブ内のファイルを読み込みたい場合など )
了解しました。
|
Re: キャッシュに読み書きしたい ( No.7 ) |
- 名前:管理人 日時:2018/02/21 01:18
> この秒数を指定することは可能でしょうか?
正常にストリーム再生を行うために必要な最低秒数という位置付けなので、指定することはできません
> また、上記秒数未満の音声を読み込んだ場合はどうなるのでしょうか?
> (その場合ストリーム再生にしなければ良いのですが、念のため聞いておきます)
サウンドデータが 13秒未満でもストリーム再生方式で読み込まれます
ただ、読み込み時間はストリーム再生方式のサウンドとして読み込まないほうが早く読み込みが完了するかもしれません
|
Re: キャッシュに読み書きしたい ( No.8 ) |
- 名前:BayLeaf(解決) 日時:2018/02/23 13:01
> 正常にストリーム再生を行うために必要な最低秒数という位置付けなので、指定することはできません
分かりました。
> サウンドデータが 13秒未満でもストリーム再生方式で読み込まれます
> ただ、読み込み時間はストリーム再生方式のサウンドとして読み込まないほうが早く読み込みが完了するかもしれません
それでは、時間別に処理を分ける方向でプログラムを組み直してみます。
一瞬、読み込む音声がストリーム再生方式の最低秒数よりも小さいかどうかで分岐して読み込むという
プログラムを考えましたが、読み込む前に一度読み込むという手間をかけていたのでボツにしました。
もし、処理が通常の読み込みよりも軽めで抑えられるのでしたら上記機能のフラグ関数が欲しいところですが、
今回は高望みしないことにします(そもそも予め分けておけば良い話なので)。
色々と教えていただきありがとうございました。
|