【问题标题】:Poor performance when loading entity with large string property using Entity Framework使用实体框架加载具有大字符串属性的实体时性能不佳
【发布时间】: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 =&gt; e.Id == 42);,如果解决了请告诉我
  • 好建议,我会尝试并回复您:)
  • AsNoTracking() 不会显着提高性能。但是,我的一位同事指出,这个问题简化的生产代码是异步的,这可能与性能有关,因此我更新了示例代码以反映这一点。

标签: c# entity-framework-6


【解决方案1】:

我昨天遇到了同样的问题。我发现实体框架的异步操作被破坏或至少非常慢。尝试同步使用相同的操作:

using (var dbContext = new MyDbContext())
{
    var entity = dbContext.Entities.Single(e => e.Id == 42);
}

也可以在这里阅读rducom 的帖子:https://stackoverflow.com/a/28619983/7108481

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2010-12-23
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多