1

私はデータベースから生成されたかなり大きなedmxを持っており、最近、アプリケーションを改善するためにパフォーマンスに取り組んでいます。さまざまな場所で多くの記事を読んだことがあります。

これは、変更の自動検出を無効にすることに関するものですhttp://msdn.microsoft.com/en-us/data/jj556205.aspx

これは、DbContextの削除のパフォーマンスを改善するためのもので、追加および削除するときに非常に遅くなります

これは(私はかなり良いと思います)http://www.codeproject.com/Articles/38922/Performance-and-the-Entity-Framework

私はすでにmyentities.tablename.MergeOption=MergeOption.NoTrackingを使用しています。コンパイルされたクエリを使用しています。EdmGenを使用してビューを事前生成し、フェッチするデータを減らしました。もちろん、パフォーマンスが飛躍的に向上しました。 54秒で読み込まれていたページが16.1秒かかるように境界を設定しますが、3秒にする必要があるため、次の改善点を探しています。

そのため、調査はすべて順調に進んでおり、その結果、最新のEntityFrameworkにアップグレードし、dbなどから.edmxを再生成し、さまざまなことを試しましたが、myEntities.Configuration.AutoDetectChangesEnabledが見つかりません。 falseに設定するため。今、私は簡単な簡単なトリックを見逃しているに違いありません-edmxにこのオプションを持たせるにはどうすればよいですか?

私はこの環境にいます。Net4.0.3、Visual Studio 2010、最新バージョンのEntityFramework、MVC 4.0 ...必要なのは、誰かが「ああ」と言って、これを実行する必要があることです。

現在、大きなテーブル(1億3400万行)の1つから1000レコードを削除すると、変更を保存するのに10分近くかかります。それで、私が読んだものから、AutoDetectChangesEnabledは私が変更する必要があるものですが、それは私のクラスに存在しませんか?それを手に入れるために私はどこで何をしなければならないのですか?

私はこれをすばやく解決しようとしています。

よろしくジュリアン

4

2 に答える 2

1

そうです、私は最終的にスタックオーバーフローでこのアイテムを見つけました エンティティのDbContextを取得します。これは、データベースの最初の edmx を .Configuration.AutoDetectChangesEnabled を持つバージョンに変更するために必要なものを説明しています。これは素晴らしく、進歩することができました。ただし、削除の保存にはまだ非常に時間がかかるため、これでは探していた解決策が得られませんでした。

したがって、教訓は、はい、ビューを生成する前にすべてのパフォーマンストリックを適用し、AutoDetectChangesenabled = trueを使用し、コンパイルされたクエリを使用し、スマート接続文字列は最初にデータを取得する代わりに偽のオブジェクトを作成するなどです...おそらくほとんどの場合取得できます許容できるパフォーマンスですが、本当に迅速に処理する必要がある場合は、TSQL に移動して手動で実行する必要があります

よろしくジュリアン

于 2012-10-28T10:42:56.180 に答える
0

AutoDetectChangesは、DbContext.Configuration.AutoDetectChangesEnabledにあります。削除する場合は、削除するIDのリストを取得し、これらのIDのみが設定された偽のオブジェクトを作成し、これらのオブジェクトを添付してから削除することもできます。

ただし、最近同様の問題が発生し、現在ADO.NETで削除しています。(または、SQLをプッシュできるDbContextのメソッドがあります)。一般に、EFはアプリに最適ですが、レコード数が膨大なため、2〜3か所でパフォーマンスが必要です。残念ながら、これらの場所ではADO.NETを使用する必要がありました。大量のデータを処理する場合は、はるかに高速です。

于 2012-10-27T20:31:53.043 に答える