エラー、バグ、質問 - ページ 2746 1...273927402741274227432744274527462747274827492750275127522753...3185 新しいコメント fxsaber 2020.05.21 08:02 #27451 Koldun Zloy: いいえ、コンパイル時にはまだ分かっていません。 では、SymbolInfoTickが 何百億回と呼び出さ れたときに、膨大な数のチェックを回避するためにはどうすればよいのでしょうか。 Koldun Zloy 2020.05.21 08:10 #27452 fxsaber: では、SymbolInfoTickが 何百億回と呼び出さ れたときに、膨大な数のチェックを回避するためにはどうすればよいのでしょうか。 そんなことはない。文字列そのものをむやみにコピーしないようにするためだけのものです。 fxsaber 2020.05.21 08:18 #27453 Koldun Zloy:いいえ。文字列そのものをむやみにコピーしないようにするためだけのものです。 もし、オプティマイザーの効率を上げたいのであれば、SymbolInfo関数の 文字列参照の解決策は、明らかに正しいものです。 Mihail Matkovskij 2020.05.21 08:29 #27454 私のプロジェクトの1つでデバッガが動作しない。しかも、その挙動を予測することは困難です。時々、ブレークポイントに入るのを拒否する。また、一部の機能の入力も拒否されます。最初はアップデートが原因かと思ったのですが(デバッグで何か問題があったのかもしれません)。しかし、他のもっとシンプルなプログラムでは、すべてがうまくいくようです。メインプロジェクトに取り組んでいるので、あまりチェックしていませんが。かなり複雑で、私が設計したモジュールだけで15個あります(標準モジュールの数は数えていません)。メインモジュールには最大で2000行が含まれます。もしかしたら、プロジェクトの複雑さのせいかもしれないと思いましたが......。また、繰り返し使うコードスニペットには、マクロを使うところもあります。また、CAppDialog, CCheckGroup, CComboBox, CButtonなどの標準的なUI要素も、私のプログラムの機能に合わせて書き直したものを使っています。もしかしたら、それらが原因でデバッグがうまくいかないのかもしれない・・・例えば、私が特に書いたCCheckGroup::itemCheckState(const string item) メソッドは、デバッグされないんだ。このメソッドは、チェックボックスの項目を見つけ、それが選択されているかどうか(その状態)をチェックします。 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CCheckGroup::itemCheckState(const string item) { int total = m_strings.Total(); if(total != m_states.Total()) return -1; int i = 0; for(; i < total; i++) { if(m_strings.At(i) == item) return m_states.At(i); } return -1; } 結局、こういうUIになりました。 UI要素の一部を仮区分しています。そして、CAppDialog要素のShow()とHide()メソッドをオーバーロードした方法を説明したブランチはこちらです。https://www.mql5.com/ru/forum/338301。その瞬間、コンパイラが文句を言い、クリティカルエラーが発生した。 最終的にプロジェクトは正常にコンパイルされ、コンパイラは何のエラーも発生させません。しかし、デバッグは失敗し、いくつかのコードフラグメント、関数、メソッドなどの実行を表示しないだけです。 私が理解する限り、その理由はいくつかありそうです。 プロジェクトの複雑なコード、マクロの使用 CAppDialog, CCheckGroup, CComboBox, CButton などの標準的な UI 要素を使った複雑なコード(これらのメソッドも新しく書き、既存のメソッドの一部を再定義しました。) 新しいビルドに関連したデバッガーのバグ(可能性あり、可能性なし)。 ビルドとシステム情報。 2020.05.21 09:35:09.325 Terminal MetaTrader 5 x64 build 2433 started for MetaQuotes Software Corp. 2020.05.21 09:35:09.326 Terminal Windows 10 build 14393, Intel Core i5-5200U @ 2.20GHz, 2 / 3 Gb メモリ, 61 / 380 Gb ディスク, IE 11, UAC, GMT+2 デバッガで同様の問題が発生した方、その原因は何でしょうか? Alexey Navoykov 2020.05.21 08:51 #27455 fxsaber: このことから、オプティマイザーの効率を上げるには、SymbolInfo関数の文字列参照ソリューションが最適であることは明らかである。 どうせ全部参照渡しなんだから。 違いは古代のMQL4だけだった。また、文字列を読み込む際のチェックはありません。 fxsaber 2020.05.21 09:14 #27456 Alexey Navoykov: このリンクは意味がない、開発者がそう言った。 全てはそのままリンクで渡される。 唯一の違いは古代のMQL4であった。また、文字列を読み込む際のチェックはありません。 そういう発言をするのは疲れるだけです。 int f1( string Str ) { return((Str += Str) == Str); } int f2( string &Str ) { return((Str += Str) == Str); } int Bench1( const int Amount = 1 e8 ) { int Res = 0; string Str = NULL; for (int i = 0; i < Amount; i++) Res += f1(Str); Print(Res); return(Res); } int Bench2( const int Amount = 1 e8 ) { int Res = 0; string Str = NULL; for (int i = 0; i < Amount; i++) Res += f2(Str); Print(Res); return(Res); } void OnStart() { BENCH(Bench1()) BENCH(Bench2()) BENCH(Bench1()) BENCH(Bench2()) } 100000000 Time[Bench1()] = 727585 100000000 Time[Bench2()] = 657464 100000000 Time[Bench1()] = 794205 100000000 Time[Bench2()] = 670440 Mihail Matkovskij 2020.05.21 09:24 #27457 fxsaber: そういう発言は疲れるだけです。 書きやすいのかもしれませんね。 int f1( string Str ) { return(Str == NULL || Str == ""); } ?... なぜそんなものを飲むのか? int f1( string Str ) { return((Str += Str) == Str); } fxsaber 2020.05.21 09:27 #27458 Mihail Matkovskij: 書きやすいかもしれません。 違う種類の議論もある。 TheXpert 2020.05.21 09:36 #27459 fxsaber: そういう発言をするのは疲れるだけです。 根拠がないことにならないように、文字列が変化 しないベンチマークをあげてください。 fxsaber 2020.05.21 09:42 #27460 TheXpert: 根拠がないことにならないように、文字列が変化 しないテストのベンチマークをあげてください。 int f1( const string Str ) { return(Str + "1" != Str); } int f2( const string &Str ) { return(Str + "1" != Str); } 10000000 Time[Bench1()] = 334596 10000000 Time[Bench2()] = 338559 10000000 Time[Bench1()] = 384711 10000000 Time[Bench2()] = 344346 1...273927402741274227432744274527462747274827492750275127522753...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
いいえ、コンパイル時にはまだ分かっていません。
では、SymbolInfoTickが 何百億回と呼び出さ れたときに、膨大な数のチェックを回避するためにはどうすればよいのでしょうか。
では、SymbolInfoTickが 何百億回と呼び出さ れたときに、膨大な数のチェックを回避するためにはどうすればよいのでしょうか。
そんなことはない。文字列そのものをむやみにコピーしないようにするためだけのものです。
いいえ。文字列そのものをむやみにコピーしないようにするためだけのものです。
もし、オプティマイザーの効率を上げたいのであれば、SymbolInfo関数の 文字列参照の解決策は、明らかに正しいものです。
私のプロジェクトの1つでデバッガが動作しない。しかも、その挙動を予測することは困難です。時々、ブレークポイントに入るのを拒否する。また、一部の機能の入力も拒否されます。最初はアップデートが原因かと思ったのですが(デバッグで何か問題があったのかもしれません)。しかし、他のもっとシンプルなプログラムでは、すべてがうまくいくようです。メインプロジェクトに取り組んでいるので、あまりチェックしていませんが。かなり複雑で、私が設計したモジュールだけで15個あります(標準モジュールの数は数えていません)。メインモジュールには最大で2000行が含まれます。もしかしたら、プロジェクトの複雑さのせいかもしれないと思いましたが......。また、繰り返し使うコードスニペットには、マクロを使うところもあります。また、CAppDialog, CCheckGroup, CComboBox, CButtonなどの標準的なUI要素も、私のプログラムの機能に合わせて書き直したものを使っています。もしかしたら、それらが原因でデバッグがうまくいかないのかもしれない・・・例えば、私が特に書いたCCheckGroup::itemCheckState(const string item) メソッドは、デバッグされないんだ。このメソッドは、チェックボックスの項目を見つけ、それが選択されているかどうか(その状態)をチェックします。
結局、こういうUIになりました。
UI要素の一部を仮区分しています。そして、CAppDialog要素のShow()とHide()メソッドをオーバーロードした方法を説明したブランチはこちらです。https://www.mql5.com/ru/forum/338301。その瞬間、コンパイラが文句を言い、クリティカルエラーが発生した。
最終的にプロジェクトは正常にコンパイルされ、コンパイラは何のエラーも発生させません。しかし、デバッグは失敗し、いくつかのコードフラグメント、関数、メソッドなどの実行を表示しないだけです。
私が理解する限り、その理由はいくつかありそうです。
ビルドとシステム情報。
2020.05.21 09:35:09.325 Terminal MetaTrader 5 x64 build 2433 started for MetaQuotes Software Corp.
2020.05.21 09:35:09.326 Terminal Windows 10 build 14393, Intel Core i5-5200U @ 2.20GHz, 2 / 3 Gb メモリ, 61 / 380 Gb ディスク, IE 11, UAC, GMT+2
このことから、オプティマイザーの効率を上げるには、SymbolInfo関数の文字列参照ソリューションが最適であることは明らかである。
このリンクは意味がない、開発者がそう言った。 全てはそのままリンクで渡される。 唯一の違いは古代のMQL4であった。また、文字列を読み込む際のチェックはありません。
そういう発言をするのは疲れるだけです。
そういう発言は疲れるだけです。
書きやすいのかもしれませんね。
?...
なぜそんなものを飲むのか?
書きやすいかもしれません。
違う種類の議論もある。
そういう発言をするのは疲れるだけです。
根拠がないことにならないように、文字列が変化 しないテストのベンチマークをあげてください。