2

InventTransをループして、いくつかの日付のitemId数量を累積し、この一時テーブルをデータソースとして使用するフォームの結果を一時テーブルに入力する必要があります。クラスを使用しましたが、itemIdのプロセスは非常に長くなります(約5〜10秒)。

どのコードが最速ですか?

  1. プロセスを実行するクラスを使用する
  2. 一時テーブルのメソッド
  3. 発信者フォームのボタンclicked()で処理する

コードを改善するにはどうすればよいですか?

4

1 に答える 1

6

コードを表示しないため、それを改善することは純粋に投機的です。

私は 3 番を完全に除外します。クリックされたメソッドにビジネス ロジックを配置することはできません。

考慮事項:

  • クライアント/サーバー: サーバー側にロジックとデータ アクセスを配置することをserver優先し、テーブル メソッドまたはクラス静的メソッドでキーワードを使用します (またはクラス プロパティを使用します)。パラメータなどのクライアントへのコールバックを避けます。
  • データ アクセス: インデックスの使用を考慮し、select でフィールド リストを使用するなど。
  • トランザクション: メイン ループの外側で ttsbegin/ttscommit を使用します。これにより、一時テーブルに対してもディスク アクセスが高速化されます。
  • TempDB テーブル: AX 2012 では、データが取り込まれた TempDB テーブルの使用を検討してinsert_recordsetください。
  • 可能であれば、一時テーブルの使用は避けてください。あなたの場合、InventSumテーブルにはデータの準備ができている可能性があります。sumテーブルの結合と組み合わせて、選択でキーワードを使用しInventDimます。ハードワークを行うためのビューを作成することを検討してください。これにより、SQL サーバーが計算を行うようになり、通常はパフォーマンスが 2 桁向上します。

長いクエリ?ユーザー設定で長いクエリの SQL ログを有効にします。

費やした時間は?コード プロファイラーを使用します。

于 2012-10-01T10:48:07.700 に答える