ライブラリ: DLLなしでのファイルマッピング - ページ 2

 

アレックス、ファイルが不要になったとき、どうやってメモリを解放するの?

つまり、ファイルがたくさんある可能性があるので、RAMを何メガ、何ギガとかき集める必要がないようにするんです。

 
CloseHandleは役に立ちますか?
 
sergeev:

CloseHandleは役に立つのか?

CloseHandleはClose()の内部で呼び出されますが、メモリを解放する わけではありません。

これはRAMが占有されていることを意味します。

void CMemMapFile::Close()
  {
   if(m_hmem!=NULL) CloseHandle(m_hmem); m_path=""; m_hmem=NULL; m_size=0; m_pos=0; m_mode=-1; // ハンドルを閉じる
  }
 

メモリ解放を 保証するためには、ファイルサイズを0にした方がいいと思う。

サイズを大きくするGrowsもあるし、割り当てられたメモリをゼロにしてファイルを削除するDeleteもある。

 

ありがとう。とても必要なことです。

それと、おそらくオフトピックな質問なのですが、ファイルマッピングは、最適化時に標準の遺伝子の代わりに外部の遺伝子を使う(例えば、ターミナルで実行されるスクリプト)ように適応できるのでしょうか?

 
joo:

ありがとう。とても必要なことです。

それと、おそらくオフトピックな質問なのですが、ファイルマッピングは、最適化時に標準の遺伝子の代わりに外部の遺伝子を使う(例えば、ターミナルで実行されるスクリプト)ように適応できるのでしょうか?


半自動でない限り、いずれにせよ誰かがテスターを起動させ、停止させなければなりません(これはclaudを使おうとする場合です)。

そしてclaudがなければテスターを使う意味がない。

 
Urain:

CloseHandleはClose()の内部で呼び出されますが、メモリを解放する わけではなく、(作成せずに)開き直すことで保存された情報を取り出すことができます。

誰かがそれを書き換えるまで、そのハンドルはそこに残ると思います。 私はこのようなことがありました。書き込むアプリケーションはハンドルを閉じ、読むアプリケーションは閉じない。しかし、データを読むことはできる。しかし、ウィンドウズで何らかの操作をすると、ファイルのデータが変わってしまう。

つまり、RAMが一杯になったということだ。

よくわかりません。
 

joo:

ファイルマッピングはおそらく、最適化時に標準の遺伝子の代わりに外部の遺伝子を使用する(例えば、ターミナルで実行するスクリプト)ように適応できるのではないでしょうか?

中間データを保存するためにファイルを使うのであれば、もちろん可能です。 主なことは、ある基準点でデータをディスクにリセットすることです。何かが起きると、情報は取り返しのつかないほど失われてしまうからです。
 
sergeev:

誰かがそれを書き換えるまで、そのハンドルはそこに残っていると思います。 私はそのようなことがありました。書き込むアプリケーションはハンドルを閉じ、読むアプリケーションは閉じない。でもデータは読める。しかし、ウィンドウズで何らかの操作をすると、ファイルのデータが変わってしまう。

よくわからない。
保証された方法でチェックする必要があるのかもしれない。でも方法がわからない。
 
Urain:

セミオートマでない限り、誰かがテスターを始動させ、止めなければならない(これはクラウドを使用する場合)。

ZYとクラウドのないテスターを使う意味はない。

そう、クラウドには問題がある......。

ユーザーがチャート上でスクリプトを実行し、テスターで最適化を開始する(スクリプトはファイルマッピングを通して最適化されたExpert Advisorに必要な変数を「スリップ」し始める)という意味です。そして、どのように、いつ、どのような条件で最適化を停止するかはまた別の問題です(例えば、Expert Advisor が「ready」フラグを受け取り、Expert Advisor のスタッフィングが動作を停止した場合、テスターはアイドルモードで残りの実行を行います。)

このようになります。