私のアプローチコアはエンジンです。 - ページ 84

 
Maxim Kuznetsov:

そうそう、MQLでテキストをパースするのはとても楽しいですよ :-)まあ、テキストパース用に設計されたものではありませんからね。できるけど、残念なことに......。

配列と命令 - これがMQLのすべてだ

そういうことなんだ...。:)

 
Nikolai Semko:

汎用性というのは、往々にして鈍重さと同義であり、文字列であればなおさらです。
一つ例を挙げましょう。

以前、暗号取引所から受け取った文字列をWebRequestでパースしたことがあります。そして、「高速C++ライブラリ」から移植したSergeev氏のJSONライブラリを使って パースしています。そして、速度が非常に不満足であることに気づかされました。そこでは、すべてが「ユニバーサル」な文字列で行われていたのです。

低速の原因は文字列だと理解し、文字列関数の使用を避けたいと思い、uchar配列から直接パースする関数を書きました。その結果、かなり驚きました。私の解析速度は...。(ドラムロール)800倍の速さです。JSONで文字列全体をパースするのに0.3秒かかるとしたら、私の関数は半分の1ミリ秒以下でパースしています。

以下は、uchar配列でパースした例です。

ご提案の骨子は以下の通りです。

  1. 文字列(640文字)を受け取り、StringToChar()関数に送ります。
  2. 配列を取得し、リソースに格納します。
  3. ResourceReadImage()を用いて2つ目の側のリソースの内容を2つ目の配列に取得する。
  4. 2番目の配列をCharArrayToString()に送り、最終的な文字列を取得します。
  5. 次に、文字列をデリミタで分割し、パラメータ値をカーネルに書き込む。

もともと、MTオブジェクトを使って文字列を転送したかったんです。

  1. 文字列(640文字)を、64文字ずつに分割する。
  2. 通信オブジェクトのループを行い、その記述に文字列の部分を書き込んでいくのです。
  3. もう一方は、通信オブジェクトのループを行い、文字列の一部を取得し、各部をデリミタで分割して、パラメータ番号と値を抽出します。
  4. カーネルにパラメータ値を書き込む。

最初は2つ目のバリエーションの方が速く感じました。

私のように多くの課題を抱えている場合、解決策を選択する際には直感に頼らざるを得ません。すべてを徹底的にチェックするには、寿命が足りなくなる。正しい方向を選択するためには、チームか、優れた直感が必要です。もちろん、プロ意識を犠牲にして、知識のギャップを我慢することも必要です。そうでなければ、(プロとはいえ)落書きをすることになり、メガプロジェクトを完成させることはできないでしょう。これが現実です。

 
Реter Konow:

ご提案の骨子は以下の通りです。

  1. 文字列(640文字)を受け取り、StringToChar()に送ります。
  2. 配列を取得して、リソースに格納します。
  3. ResourceReadImage()を用いて2つ目の側のリソースの内容を2つ目の配列に取得する。
  4. 2番目の配列をCharArrayToString()に送り、最終的な文字列を取得します。
  5. 次に、文字列をセパレータで分割し、パラメータ値をカーネルに書き込む。

全然、こんなもんじゃない。
今、忙しいんです。説明する時間がないんです。

私のコードを 空白部分がないように細かく分解してみると、自分自身で多くの発見があるはずです。
ZS.ただ、デバッガがなければ、それを理解するのはもっと難しいでしょう。使い始めたのか、まだこの重要なツールを使っていないのか分かりませんが。

 
Nikolai Semko:

...

私のコードを 空白にせず詳細に調べれば、新しい発見がたくさんあるはずです。
ZS.ただ、デバッガを使わないと、もっとわかりにくいですね。使い始めたのか、まだこの重要なツールを使っていないのか分かりませんが。

明日、あなたのコードを詳しく見てみるわ。(タイムゾーンをお忘れなく)。

もしかしたら、本当に、新しい発見があるかもしれません。))

 

構造体はすべて文字列である。構造体の配列は、その形式を記述した文字列の配列である。クラス - 構造とメソッド、クラスの実装 - 実装の配列(フランス語で失礼)。

最後の瞬間まで変換する必要はありません。どこにでも糸が絡んでいるだけです。単純に、2バイト、4バイトのものもあれば、1バイトのものもあるので、アライメントをとる必要がある、という正規化です。

私が初めてこの方法を使ったのは、1993年頃のClarion DBMSです。とても早く効果が出ました。

 
Алексей Тарабанов:

構造体はすべて文字列である。構造体の配列は、その形式を記述した文字列の配列である。クラス - 構造とメソッド、クラスの実装 - 実装の配列(フランス語で失礼)。

最後の瞬間まで変換する必要はありません。どこにでも糸が絡んでいるだけです。単純に、2バイト、4バイトのものもあれば、1バイトのものもあるので、アライメントをとる必要がある、という正規化です。

私が初めてこの方法を使ったのは、1993年頃のClarion DBMS です。すべてにおいて、非常に迅速に作業が進みました。

ほぼ同時期に同じものを:-)ある学校...ちなみにDBMSは悪くなく、いろいろな意味で時代を先取りしていた。

PS/「すべてが文字列/テキスト」というコンセプトレベルの後付けで、時に熱く愛されるチカラがあるんです。スピードは本当にpythonのレベルです。

 
Реter Konow:

明日、あなたのコードを詳しく見てみるわ。(タイムゾーンをお忘れなく)。

もしかしたら、本当に新しい発見があるかもしれない。))

役に立つかもしれない

ダブル例でリソース変数を使用し、TF変更時に値を再初期化しないインジケータの例です。ターミナルのグローバル変数 に代わる、より便利な機能です。同様に、異なるデータ構造およびその配列もグローバルなものとして使用することができます。

ファイル:
 
Nikolai Semko:

まだ使えるかもしれません。

)

 
Реter Konow:
興味本位で、unionを使ったバリアントを試してみることにします。また、CharArrayToStringとStringToCharArrayで直感的には、МТオブジェクトの記述によるコミュニケーションより速いとは思えないのですが。しかし、私は間違っているかもしれない。えーと...

ピーター 最初からワイルドカードを作っておいて、そのワイルドカードの中でメッセージング性能について議論しているんですね。文字列はただの便利な○○であって、それ以上ではないのだ。どんなデータも、実際はメモリ上のバイトの集まりに過ぎない。だからバイトを直接扱えということなのだが、同じ文字列が同じバイト配列であることを理解していないのは、相変わらず頑固だ。そのため、文字列からuchar配列への変換では何も失われませんが、文字列をパースする際にパフォーマンスが著しく低下します。だから、直感がすべて欠落しているだけなのです。

 
Vasiliy Sokolov:

1.Peterさん、あなたはもともとゲームをやっていて、今、ゲーム内のメッセージングパフォーマンスについて議論していますね。

2.わかるか:文字列はただの便利な○○であり、それ以上のものではありません。どんなデータも、実際はメモリ上のバイトの集まりに過ぎない。だから、バイトを直接扱うようにとアドバイスされるのですが、同じ文字列が同じバイト配列であることを理解できないのは、相変わらず頑固なんですね。そのため、文字列からuchar配列への変換では何も失われません。 しかし、文字列をパースする際には、パフォーマンスが大きく低下してしまいます。

3.だから、あなたの直感はすべて外れただけなのです。

1."ワイルドネス" - この場合、あなたの理解であって、私がしたことではありません。何のためのエンジンなのか、75ページで 理解できましたね。理解する:欠陥やエラーは、実体を特徴づける ものではない。 エッセンスの形がエッセンスそのものを特徴づけることはない。服装でその人がどんな人なのかが決まらないのと同じように。全体を特定で判断するのは、間違った考え方だけです。

2.そのままでもわかりやすい。StringToChar関数を使って、本当に速度が上がるのか、今日確認してみます。

3.毎日、自分の直感を確認する。毎日、疑っています。そして、当然ながら、その通りです。もし失敗したら、Reasonに導かれるはずです。しかし、理性はあまりにも限定的で、傲慢で、愚かなので、いつも頼りにしているわけではありません。だから、直感が唯一の選択肢なのです。もし、私の言っていることがわかるなら...

理由: