【发布时间】:2017-03-22 14:47:49
【问题描述】:
给定一个实体和一个 DbContext,如下所示:
public class Entity
{
public int Id {get;set;}
public string LargeString {get;set;}
}
public class MyDbContext : DbContext
{
public DbSet<Entity> Entities {get;set;}
}
还有一个存储在数据库中的实体,Id 42 和 LargeString 包含大约 2 兆字节的 XML。以下耗时半分钟左右,偶尔给OutOfMemoryException:
using (var dbContext = new MyDbContext())
{
var entity = await dbContext.Entities.SingleAsync(e => e.Id == 42);
}
同时,以下 Dapper 查询以毫秒为单位执行:
using (var dbContext = new MyDbContext())
{
var entity = await dbContext.Database.Connection
.Query<Entity>("SELECT Id, LargeString FROM Entities WHERE Id = 42")
.SingleAsync();
}
是否有可能以某种方式提示 Entity Framework LargeString 属性可能如此之大(以某种方式使 Entity Framework 在这种情况下执行可接受)。
【问题讨论】:
-
试试
dbContext.Entities.AsNoTracking().Single(e => e.Id == 42);,如果解决了请告诉我 -
好建议,我会尝试并回复您:)
-
AsNoTracking()不会显着提高性能。但是,我的一位同事指出,这个问题简化的生产代码是异步的,这可能与性能有关,因此我更新了示例代码以反映这一点。
标签: c# entity-framework-6