gpt4 book ai didi

c# - EF Core 2.1 启动缓慢

转载 作者:行者123 更新时间:2023-11-30 15:16:29 27 4
gpt4 key购买 nike

在体验了 EF6(如 this)之后,我想试用 EF Core,因为我阅读了一些文章并观看了一些视频,说它的性能大大优于 EF6。

所以,我用类制作了示例程序:

 public interface IEntity
{
int Id { get; set; }
}

public class Employee : IEntity
{
public int Id { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
}

然后我使用通用存储库创建了一个存储库模式:

public interface IRepository<T> : IDisposable where T : IEntity
{
void Insert(T entity);
void Delete(T entity);
IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate);
IQueryable<T> GetAll();
T GetById(int id);
void Update(T entity);
void BeginTransaction();
IDbContextTransaction Transaction { get; }
}

public class Repository<T> : IRepository<T> where T : class, IEntity
{
private RosterContext _context;
private IDbContextTransaction _transaction;

public Repository(bool wrapTransaction = false)
{
_context = new MyContext();

if (wrapTransaction)
{
_transaction = _context.Database.BeginTransaction();
}
}

public void Update(T entity)
{
_context.Set<T>().Update(entity);
_context.SaveChanges();
}

public void BeginTransaction()
{
if (_transaction == null)
_transaction = _context.Database.BeginTransaction();
}

public void Insert(T entity)
{
_context.Set<T>().Add(entity);
_context.SaveChanges();
}

public void Delete(T entity)
{
var toDelete = GetById(entity.Id);
_context.Set<T>().Remove(toDelete);
_context.SaveChanges();
}

public IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate)
{
return _context.Set<T>().AsNoTracking().Where(predicate);
}

public IQueryable<T> GetAll()
{
return _context.Set<T>().AsNoTracking();
}

public T GetById(int id)
{
return _context.Set<T>().AsNoTracking().FirstOrDefault(x => x.Id == id);
}


public IDbContextTransaction Transaction => _transaction;

public void Dispose()
{
_transaction?.Dispose();
_context?.Dispose();
}
}

这是上下文:

    public class MyContext : DbContext
{
public DbSet<Employee> Employees { get; set; }

public MyContext()
{
Database.Migrate();
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=test.db");
}
}

如您所见,这是最简单的示例:一个表,一个实体,具有存储在 SQLite 中的 2 个属性。问题是,第一个查询需要将近 5 秒,数据库中有 10 行。下一个是即时的。

我在配备 SSD 驱动器和 i5 处理器的计算机上工作。

问题是什么?是 SQLite 吗?是 Database.Migrate(); (如果我评论这一行它不会改变任何东西)?或者所有的性能改进都是不好的?

最佳答案

其实这个问题只是在调试的时候出现的。原因是 Entity Framework 抛出并捕获了数以千计的异常,它们减慢了调试器的速度。请参阅 GitHub 问题 here .

为了解决这个问题,我在工具 -> 选项 -> 调试 -> 常规中启用了“仅启用我的代码”选项。这样 Visual Studio 就不会跟踪来自 Entity Framework 的异常。

关于c# - EF Core 2.1 启动缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com