I came across a bottleneck while testing an application that interfaces with a SQL-Compact 3.5 database with EF.
Usually, when I come across a bottleneck like this, I rework the linq query to reduce the number of linq queries done because re-running the same linq query a dozen times on a database filled with thousands of entries creates a bit of overhead. Then, I use plinq to speed up instantiation time.
Doing this has worked fairly well until I tried to do this with the ShapeEntities table.
The ShapeEntity is an abstract entity which works as the base class for other entities that are nearly identical to each-other. I can't run this with the AsParallel() method.
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);
If I were to remove the AsParallel() from the code above, the query takes about 1.4 seconds to execute when we put it in the list. With the AsParallel() method, I get an AccessViolationException after about 40 seconds. It never gets past instantiation.
Does anyone have any ideas on how to speed this up? I can't do ImageEntity.ShapeEntities because then it turns into 1.2 seconds per ImageEntity.