プロジェクトを遅延読み込みから熱心な読み込みに移行しています。Entity Framework 6多数の子要素と子要素を含む大きなオブジェクトを読み込むことを熱望します
大きなオブジェクトをすべて子供で取得し、シリアル化してフロントエンドのSPAアプリに送信する必要があります。
が、私は大規模なクエリを構築しましたが、それはあまりにも多くのメモリをとる(VSのデータ診断ツールに示すように、メモリ使用量が200メガバイトでジャンプし、オブジェクト自体は〜60キロバイトであるときJSONにシリアライズ)
Include(x => x.Privileges)
.Include(x => x.Team.Branch)
.Include(x => x.Equality)
.Include(x => x.AddressDetails).Include(x => x.ContactDetails)
.Include(x => x.EmployeeDetails.GeneralUnavailability)
.Include(x => x.EmployeeDetails.EligibilityDocuments.Select(z => z.Document.Priviliges))
.Include(x => x.EmployeeDetails.Position.PositionPayRuleExceptions).Include(x => x.EmployeeDetails.Position.PositionPayRuleExceptions.Select(z => z.PayRule)).Include(x => x.EmployeeDetails.Position.DefaultOffer)
.Include(x => x.TransportationMode.ProofOfLicence.Priviliges).Include(x => x.TransportationMode.ProofOfInsurance)
.Include(x => x.UserAcademicQualifications.Select(z => z.AcademicQualification)).Include(x => x.UserAcademicQualifications.Select(z => z.AcademicQualificationScan.Priviliges))
.Include(x => x.ProfessionalRegistrations.Select(z => z.Body)).Include(x => x.ProfessionalRegistrations.Select(z => z.ProfessionalRegistrationScan.Priviliges))
.Include(x => x.Unavailabilities.Select(z => z.AbsenceType)).Include(x => x.Unavailabilities.Select(z => z.Document.Priviliges))
.Where(x=>x.Id=1)
I ef6でクエリを作成するのは初めてです...私は今までに遅延読み込みを使用していたからです。それを最適化する方法はありますか?
Priviligesは
ドキュメント、ProfessionalRegistrationScan、AcademicQualificationScan、ProofOfInsurance、ProofOfLicenceは、多くの関係Priviligesに多くを持っているファイルのモデルを使用しているPriviligeモデルの一覧です。
はあなたの助けUPDATE test..andメモリの使用量として.AsNoTrackingを()を使用してみました
はそれに100メガバイト〜でジャンプしてくれてありがとう。 これは〜60kbのオブジェクトのためにまだちょっと高いです...
あなたは.AsNoTracking()を使用しますか?また、「あまりにも多くのメモリがある」とは、オブジェクトが実際に大きすぎてメモリに収まらない、またはクエリの実行が遅すぎることを意味します。そうであれば、多くのインクルードを含むクエリは特にSQLに変換するのに時間がかかることに注意してください。 – DevilSuichiro
クエリには実行に200msかかりますが、これは遅延読み込みよりも10倍高速です。オブジェクトはMB単位のサイズではそれほど大きくありません。このクエリを実行するだけで、200 MBのメモリが必要になります。これはVSのデータ診断ツールに示されています。 .AsNoTracking()はオブジェクトを切り離しますか?私はまた、私は変更を保存する必要がある場所を持っています.... –
うーん、私は以前に 'AsNoTracking' *増加*メモリ使用量を見たことがないと思う...あなたがしようとすると間違いなくいくつかの問題が発生します後でデータを変更して後で保存することは可能ですが、回避することは可能です。 –