私はJava EE 6 Webアプリケーションを作成しています。オブジェクトを直接作成して使用する場合に比べて、パフォーマンスに大きな影響を与えています。オーバヘッドは、メソッド呼び出しごとに50〜60msのオーダーであるように見えます。CDIを使用した場合のパフォーマンスへの影響
たとえば、注入されていない150のメソッド呼び出しを使用すると約500msかかりますが、注入されたオブジェクト150のメソッド呼び出しを使用すると12,000-13,000msかかります。大きさの違いの順序といくつか。
これは通常ですか?
私はCDIを処理するためにWeldを使用するJBoss AS 7.1.1 finalで動作しています。
注入オブジェクトは、(javax.ejb.Singletonアノテーションを介して)シングルトンBeanとして定義されます。これは問題の一部を引き起こす可能性がありますか?それとも、スローダウンを引き起こすWeldプロキシですか?
パフォーマンスがそれほど気になる人は、まずはJava EEを使用しています。私はプロキシのインターセプタがあなたのコードのボトルネックになることを真剣に疑っています。つまり、インターセプトされたメソッド呼び出しの中にデバッガにブレークポイントを設定して、通過する必要があるプロキシのレイヤ数を調べることです。過剰な量が適用されるような構成上の問題がある可能性があります。 – millimoose
@Singletonではなく、注入されたオブジェクトをApplicationScopedに変更すると、処理が大幅に向上しました。なぜ誰かがこれについてのフィードバックを持っているなら、私は考えていないし、興味があります。 – Troup
それは...奇妙です。私はまだコールチェーンの違いが何であるかを見るためにデバッガでそれを突き詰めていました。さもなければ私達は1つの漠然とした症状の原因を推測することに固執している。一般的に私はこのオーバーヘッドの原因がAOPであるべきだと考えていますが、それは何よりも推測です。 – millimoose