SQL-Compact 3.5データベースとEFでインターフェイスするアプリケーションをテストする際に、ボトルネックが発生しました。継承されたエンティティでPLINQを実行するとAccessViolationExceptionがスローされる
通常、私はこのようなボトルネックに遭遇すると、何千ものエントリで満たされたデータベースで同じlinqクエリを12回再実行するため、linqクエリの回数を減らすためにlinqクエリを修正しますオーバーヘッドの次に、インスタンス化の時間を短縮するためにplinqを使用します。
これを行うには、ShapeEntitiesテーブルでこれを実行しようとするまで、かなりうまくいきました。
ShapeEntityは、互いにほぼ同じ他のエンティティの基本クラスとして機能する抽象エンティティです。私はAsParallel()メソッドでこれを実行することはできません。
HashSet<Guid> keys ...
var x =
from shape in model.ShapeEntities.AsParallel()
where keys.Contains(shape.ImageKey)
select shape;
List<ShapeEntity> shapes = new List<ShapeEntity>(x);
上記のコードからAsParallel()を削除すると、クエリを実行するのに約1.4秒かかります。 AsParallel()メソッドでは、約40秒後にAccessViolationExceptionが発生します。それは過去のインスタンス化を得ることはありません。
誰かがこれをスピードアップする方法について考えていますか?私はImageEntity.ShapeEntitiesを実行できません。ImageEntityごとに1.2秒になるからです。
EFコンテキストはスレッドセーフではないと思います。私はあなたがPLINQでそれらを使うことができないことを意味していると確信しています。 – Gabe