1

Telerik DataAccess ORM を使用している方の助けを求めています。最近、null 許容の外部キーで大きなパフォーマンスの問題が発生しました。

Nullable int 外部キー プロパティに値を割り当てると (SaveChanges なし)、Telerik はデータベースに対していくつかの呼び出しを行い、いくつかの奇妙な作業を行います。dotTrace を使用したところ、多くの SQL DataReader 呼び出しといくつかの奇妙な文字列/DateTime/Enum/... コンバーターがあることがわかりました。この問題は、プロパティに値を設定した場合にのみ発生し、get は正常に動作します。

私たちの環境について少し。空のコンソール アプリを作成しようとしました。同じ奇妙なコードが呼び出されますが、ローカル環境でははるかに高速です。小さなエンティティとローカル データベースの場合は最大 60 ミリ秒です。大きなエンティティの場合は 1.5 秒程度ですが、Azure Sql DB を使用する運用サーバーでは 10 ~ 50 秒です。

注: 外部キーを使用せずにオブジェクトを直接ロードして設定しようとしましたが、役に立ちません。

public class Entity
{
    public int? ParentId { get; set; } // Wee see this issue when we set value to the ParentId or Parent property. SaveChanges is not called.

    public Parent Parent { get; set; }
}

ここで、dotTrace コール スタックを見つけることができます。

4

1 に答える 1

1

最後に、この問題を解決しました。IsManaged構成を使用するすべての人に警告したいと思います。ParentId または Parent エンティティを設定するたびに、指定された ParentId を持つすべての子がメモリに読み込まれます。遅延ロードが有効になっている場合でも。

Telerik は、この動作を最適化できることに同意していますが、下位互換性のために変更を加えたくありません。

于 2016-11-17T13:05:04.047 に答える