MT5 RAMメモリの容量不足、大容量ファイルの読み書きに問題がある。 - ページ 6 12345678 新しいコメント Aleksey Vyazmikin 2018.07.21 23:31 #51 Vladimir:メモリの再割り当ての頻度を少なくするために、まずは最小限の変更をすることをお勧めします。2行 m_total_rows++;ArrayResize(m_cells,m_total_rows*m_total_columns,10000)を実行。 bool CSVReader::AddData(string data_str,bool header) で置き換えてください。 m_total_rows++; if (m_total_rows*m_total_columns>ArraySize(m_cells))ArrayResize(m_cells,2*m_total_rows*m_total_columns)とする。 コピーによるメモリ再割り当ての回数は、O(n)ではなく、O(log(n,2))になるはずです。60万円ではなく、20万円。今はそれで十分かもしれませんね。ありがとうございました。自分の持っているものを知らせたい。 1.メモリに変化はありません。10ギガバイトもあれば、現在のコードはあちこちのRAMを食いつぶしていました。 2.スピードで 2.1 旧バージョン 574秒 2018.07.22 02:08:18.694 Scripts script Pred_Ocenka (Si Splice,M1) loaded successfully 2018.07.22 02:17:52.059 Scripts script Pred_Ocenka (Si Splice,M1) removed 2.2 新バージョン:138秒。 2018.07.22 02:22:16.728 Scripts script Pred_Ocenka (Si Splice,M1) loaded successfully 2018.07.22 02:24:34.569 Scripts script Pred_Ocenka (Si Splice,M1) removed だから、4回分の利得が得られるわけで、これはかなり良いことだと思いますしかし、メモリは厳しいし、これだけでは到底読み込めない......。 Aleksey Vyazmikin 2018.07.21 23:40 #52 Maxim Dmitrievsky:とても便利)そこで、CSVをバイナリに変換し、日付を除いた。 その結果、スクリプトを実行すると1ギガバイトのメモリを消費し、10と比較すると非常に良好であることがわかりました。とはいえ、やはり多いですね :) スピード面では、わずか16秒!かなり良いですね! 2018.07.22 02:35:12.338 Scripts script Pred_Ocenka_02 (Si Splice,M1) loaded successfully 2018.07.22 02:35:28.334 Scripts script Pred_Ocenka_02 (Si Splice,M1) removed Roffild 2018.07.22 00:58 #53 Vladimir:メモリの再割り当ての頻度を少なくするために、まずは最小限の変更をすることをお勧めします。2行m_total_rows++;ArrayResize(m_cells,m_total_rows*m_total_columns,10000)。bool CSVReader::AddData(string data_str,bool header) で置き換えてください。m_total_rows++; if (m_total_rows*m_total_columns>ArraySize(m_cells))ArrayResize(m_cells,2*m_total_rows*m_total_columns)を使用します。コピーによるメモリ再割り当ての回数は、O(n)ではなく、O(log(n,2))になるはずです。60万円ではなく、20万円。もしかしたら、それで十分かもしれません。実は、ArrayResize() の3番目のパラメータは、ある理由で指定されているのですが...。悪い変化です。 ドキュメントを読む Vladimir 2018.07.22 01:35 #54 Roffild:実は、ArrayResize()の3番目のパラメータは、ある理由で指定されているのですが...。羽のような変化... ドキュメントを読む異なるプログラムで作成され、任意のサイズを持つ.csvをメモリにリフティングする問題を解決するために、このケースに有用な第3のパラメータについて、ドキュメントから何を学びましたか? バイナリサーチよりもメモリ再配置の速度を上げる(ArrayResizeの呼び出し 回数を減らす)、より良い、バイナリでない変更を自由に提案してください...。 Vladimir 2018.07.22 02:39 #55 Aleksey Vyazmikin:ありがとうございました。何が出てくるか、またお知らせします。 1.メモリに変化はありません。10ギガバイトもあれば、現在のコードはあちこちのRAMを食いつぶしていました。 2.スピードで 2.1 旧バージョン 574秒 2.2 新バージョン:138秒。 だから、4回分の利得が得られるわけで、これはかなり良いことだと思いますとはいえ、メモリは厳しいし、読み込むのも一苦労ですが......。読み込んだ後、bool CSVReader::Load(int start_line)の中で、行の後に FileClose(filehandle)。 メモリ解放の 挿入 ArrayResize(m_cells,m_total_rows*m_total_columns)を使用します。 m_cellsが占有するメモリの0-50%を不要に開放する。m_cells本体のみで、セルの内容は含まれません。 Aliaksandr Hryshyn 2018.07.22 02:53 #56 現在、CSVを高速に処理するための小さなライブラリーを作っています。 スクリーンショットには、7秒で通過するテストランがあります!!!!Xeonプロセッサー、周波数3. まず、スクリプトは各カラムのデータフォーマットを作成する。6つのカラムがあります。そして、1000000行がテーブルに追加され、0から999999までの数字で埋め尽くされます。データ形式によって、数値の捉え方が異なります。そして、すべてがファイルに保存されます。 ファイルサイズは65.4MBです。全体の構成は、メモリに232MBを消費した。 Maxim Dmitrievsky 2018.07.22 05:36 #57 Aleksey Vyazmikin:そこで、CSVをバイナリに変換し、日付を除いた。 その結果、スクリプトを実行すると1ギガバイトのメモリを消費し、10と比較すると非常に良好であることがわかりました。ただし、それでも多い :) スピード面では、わずか16秒!かなり良いですね! まあ、スクリプト自体が不自由なのは変わりないんだけどね。 Aleksey Vyazmikin 2018.07.22 11:11 #58 Vladimir:読み込み後、bool CSVReader::Load(int start_line)の、行の後ろ。 FileClose(filehandle)。 インサートメモリーリリース ArrayResize(m_cells,m_total_rows*m_total_columns)を使用します。 m_cellsが占有するメモリの0-50%を不要に開放する。m_cells本体のみで、セルの内容は含まれません。ありがとうございます。しかし、ファイルを閉じたり、スクリプトを終了させたりすると、とにかくメモリはすぐに解放されます。ランニング中の消費量を減らすには...。 Aleksey Vyazmikin 2018.07.22 11:12 #59 Aliaksandr Hryshyn:現在、CSVを素早く処理するための小さなライブラリを作っています。 スクリーンショットには、7秒で通過するテストランがあります!!!!Xeonプロセッサー、周波数3. まず、スクリプトは各カラムのデータフォーマットを作成する。6つのカラムがあります。そして、1000000行がテーブルに追加され、0から999999までの数字で埋め尽くされます。データ形式によって、数値の捉え方が異なります。そして、すべてがファイルに保存されます。 ファイルサイズは65.4MBです。全体の構成は、メモリに232MBを消費した。 なかなか面白い。プログラミングの成果を公開する予定はありますか? Aleksey Vyazmikin 2018.07.22 11:20 #60 Maxim Dmitrievsky:まあ、脚本自体は相変わらず雑なんですけどね。その中で、何を直せばいいのか教えてください。 #property version "1.00" #property indicator_chart_window #property strict //--- #property script_show_inputs //#include <CSVReader.mqh> //Класс по чтению информации из файла #include <CsvWriter_2.mqh> //Класс по записи информации в файл input string FileLoadSetup="PredFind\\Test\\Pred_Ocenka_Read.csv"; input int Prediktor=1; //Целевая input double Support=0.01;//Поддержка input double Relevantnost=70.0;//Достоверность //---Переменные int ArrTest[][57]; CsvWriter Printer; int Statistic; int StrokTotal=0; int arrSize=0; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int arrTest2[][57]; int r=FileOpen("PredFind\\Test\\test.bin",FILE_BIN|FILE_READ); if(r!=INVALID_HANDLE) { FileReadArray(r,arrTest2,0,WHOLE_ARRAY); Print(arrTest2[1][1]); arrSize=ArraySize(arrTest2)/57; StrokTotal=arrSize; Print(arrSize); ArrayFree(ArrTest); ArrayResize(ArrTest,arrSize); for(int i=1;i<StrokTotal; i++) { for(int s=1;s<56+1; s++) { //Print("s=",s); ArrTest[i,s]=arrTest2[i,s]; } } Print(ArrTest[2,1]); for(int i=1;i<StrokTotal; i++) { for(int s=3;s<56+1; s++) { if (ArrTest[i,s]>=0)ArrTest[i,s]=ArrTest[i,s]*ArrTest[i,1]; else ArrTest[i,s]=ArrTest[i,s]*ArrTest[i,2]; } } } else Print("File open failed, error ",GetLastError()); /* int h=FileOpen("PredFind\\Test\\test.bin",FILE_BIN|FILE_WRITE); FileWriteArray(h,ArrTest,0,WHOLE_ARRAY); FileClose(h); */ string TimeF=TimeToString(TimeLocal(),TIME_DATE|TIME_MINUTES); StringSetCharacter(TimeF,13,'_'); Statistic=Printer.FileCreate(Symbol()+"_"+TimeF+"_""Pred_Ocenka_Write","PredFind\\Test",false,false,EvryTick); //Создание файла для записи Printer.Write( "arr_Data", "arr_Buy_Sell", "arr_Buy_Sell" ); for(int i=1;i<arrSize; i++) { Printer.Write( IntegerToString(0), IntegerToString(ArrTest[i,1]), IntegerToString(ArrTest[i,2]), IntegerToString(ArrTest[i,3]), IntegerToString(ArrTest[i,4]), IntegerToString(ArrTest[i,5]), IntegerToString(ArrTest[i,6]), IntegerToString(ArrTest[i,7]), IntegerToString(ArrTest[i,8]), IntegerToString(ArrTest[i,9]), IntegerToString(ArrTest[i,10]), IntegerToString(ArrTest[i,11]), IntegerToString(ArrTest[i,12]), IntegerToString(ArrTest[i,13]), IntegerToString(ArrTest[i,14]), IntegerToString(ArrTest[i,15]), IntegerToString(ArrTest[i,16]), IntegerToString(ArrTest[i,17]), IntegerToString(ArrTest[i,18]), IntegerToString(ArrTest[i,19]), IntegerToString(ArrTest[i,20]), IntegerToString(ArrTest[i,21]), IntegerToString(ArrTest[i,22]), IntegerToString(ArrTest[i,23]), IntegerToString(ArrTest[i,24]), IntegerToString(ArrTest[i,25]), IntegerToString(ArrTest[i,26]), IntegerToString(ArrTest[i,27]), IntegerToString(ArrTest[i,28]), IntegerToString(ArrTest[i,29]), IntegerToString(ArrTest[i,30]), IntegerToString(ArrTest[i,31]), IntegerToString(ArrTest[i,32]), IntegerToString(ArrTest[i,33]), IntegerToString(ArrTest[i,34]), IntegerToString(ArrTest[i,35]), IntegerToString(ArrTest[i,36]), IntegerToString(ArrTest[i,37]), IntegerToString(ArrTest[i,38]), IntegerToString(ArrTest[i,39]), IntegerToString(ArrTest[i,40]), IntegerToString(ArrTest[i,41]), IntegerToString(ArrTest[i,42]), IntegerToString(ArrTest[i,43]), IntegerToString(ArrTest[i,44]), IntegerToString(ArrTest[i,45]), IntegerToString(ArrTest[i,46]), IntegerToString(ArrTest[i,47]) ); } } 12345678 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
メモリの再割り当ての頻度を少なくするために、まずは最小限の変更をすることをお勧めします。2行
m_total_rows++;
ArrayResize(m_cells,m_total_rows*m_total_columns,10000)を実行。
bool CSVReader::AddData(string data_str,bool header) で置き換えてください。
m_total_rows++;
if (m_total_rows*m_total_columns>ArraySize(m_cells))ArrayResize(m_cells,2*m_total_rows*m_total_columns)とする。
コピーによるメモリ再割り当ての回数は、O(n)ではなく、O(log(n,2))になるはずです。60万円ではなく、20万円。今はそれで十分かもしれませんね。
ありがとうございました。自分の持っているものを知らせたい。
1.メモリに変化はありません。10ギガバイトもあれば、現在のコードはあちこちのRAMを食いつぶしていました。
2.スピードで
2.1 旧バージョン 574秒
2.2 新バージョン:138秒。
だから、4回分の利得が得られるわけで、これはかなり良いことだと思いますしかし、メモリは厳しいし、これだけでは到底読み込めない......。
とても便利)
そこで、CSVをバイナリに変換し、日付を除いた。
その結果、スクリプトを実行すると1ギガバイトのメモリを消費し、10と比較すると非常に良好であることがわかりました。とはいえ、やはり多いですね :)
スピード面では、わずか16秒!かなり良いですね!
メモリの再割り当ての頻度を少なくするために、まずは最小限の変更をすることをお勧めします。2行
m_total_rows++;
ArrayResize(m_cells,m_total_rows*m_total_columns,10000)。
bool CSVReader::AddData(string data_str,bool header) で置き換えてください。
m_total_rows++;
if (m_total_rows*m_total_columns>ArraySize(m_cells))ArrayResize(m_cells,2*m_total_rows*m_total_columns)を使用します。
コピーによるメモリ再割り当ての回数は、O(n)ではなく、O(log(n,2))になるはずです。60万円ではなく、20万円。もしかしたら、それで十分かもしれません。
実は、ArrayResize() の3番目のパラメータは、ある理由で指定されているのですが...。悪い変化です。
ドキュメントを読む
実は、ArrayResize()の3番目のパラメータは、ある理由で指定されているのですが...。羽のような変化...
ドキュメントを読む
異なるプログラムで作成され、任意のサイズを持つ.csvをメモリにリフティングする問題を解決するために、このケースに有用な第3のパラメータについて、ドキュメントから何を学びましたか?
バイナリサーチよりもメモリ再配置の速度を上げる(ArrayResizeの呼び出し 回数を減らす)、より良い、バイナリでない変更を自由に提案してください...。
ありがとうございました。何が出てくるか、またお知らせします。
1.メモリに変化はありません。10ギガバイトもあれば、現在のコードはあちこちのRAMを食いつぶしていました。
2.スピードで
2.1 旧バージョン 574秒
2.2 新バージョン:138秒。
だから、4回分の利得が得られるわけで、これはかなり良いことだと思いますとはいえ、メモリは厳しいし、読み込むのも一苦労ですが......。
読み込んだ後、bool CSVReader::Load(int start_line)の中で、行の後に
FileClose(filehandle)。
メモリ解放の 挿入
ArrayResize(m_cells,m_total_rows*m_total_columns)を使用します。
m_cellsが占有するメモリの0-50%を不要に開放する。m_cells本体のみで、セルの内容は含まれません。
現在、CSVを高速に処理するための小さなライブラリーを作っています。
スクリーンショットには、7秒で通過するテストランがあります!!!!Xeonプロセッサー、周波数3.
まず、スクリプトは各カラムのデータフォーマットを作成する。6つのカラムがあります。そして、1000000行がテーブルに追加され、0から999999までの数字で埋め尽くされます。データ形式によって、数値の捉え方が異なります。そして、すべてがファイルに保存されます。
ファイルサイズは65.4MBです。全体の構成は、メモリに232MBを消費した。
そこで、CSVをバイナリに変換し、日付を除いた。
その結果、スクリプトを実行すると1ギガバイトのメモリを消費し、10と比較すると非常に良好であることがわかりました。ただし、それでも多い :)
スピード面では、わずか16秒!かなり良いですね!
まあ、スクリプト自体が不自由なのは変わりないんだけどね。
読み込み後、bool CSVReader::Load(int start_line)の、行の後ろ。
FileClose(filehandle)。
インサートメモリーリリース
ArrayResize(m_cells,m_total_rows*m_total_columns)を使用します。
m_cellsが占有するメモリの0-50%を不要に開放する。m_cells本体のみで、セルの内容は含まれません。
ありがとうございます。しかし、ファイルを閉じたり、スクリプトを終了させたりすると、とにかくメモリはすぐに解放されます。ランニング中の消費量を減らすには...。
現在、CSVを素早く処理するための小さなライブラリを作っています。
スクリーンショットには、7秒で通過するテストランがあります!!!!Xeonプロセッサー、周波数3.
まず、スクリプトは各カラムのデータフォーマットを作成する。6つのカラムがあります。そして、1000000行がテーブルに追加され、0から999999までの数字で埋め尽くされます。データ形式によって、数値の捉え方が異なります。そして、すべてがファイルに保存されます。
ファイルサイズは65.4MBです。全体の構成は、メモリに232MBを消費した。
なかなか面白い。プログラミングの成果を公開する予定はありますか?
まあ、脚本自体は相変わらず雑なんですけどね。
その中で、何を直せばいいのか教えてください。