【发布时间】:2016-02-12 12:07:47
【问题描述】:
我很想知道在我的项目中实例化一个新实例需要多长时间,是否有某种工具可以做到这一点?或者只是将日志放在打印时间的 ctor 之后就足够了?
我想知道创建新的常规 c# 公共类与创建通用类(如 Repository)之间是否存在时间差异,以确定是否有任何一点让它变得懒惰:
假设我有一个服务,每个请求都会注入我所有应用程序的存储库:
public class DataService
{
private IRepository<Folder> _folders;
private IRepository<Folder> _letters;
// Gets repositories per request
public DataService(IRepository<Folder> foldersRepo, IRepository<Letter> lettersRepo..........)
{
_letters = lettersRepo;
_folders = foldersRepo;
}
}
public IRepository<T> where T: BaseEntityObject
{
void Add(T entity);
void Remove(T entity);
List<T> Get();
T FindById(int id);
int SaveChanges();
void Dispose();
}
public abstract class EFRepository<T> : IRepository<T>
{
protected readonly DbContext Context;
public EFRepository(DbContext context)
{
Context = context;
}
public abstract List<T> Get();
public void Add(T item)
{
Context.Set<T>().Add(item);
}
public void Remove(T item)
{
Context.Set<T>().Remove(item);
}
public void Update(T item)
{
Context.Entry(item).State = EntityState.Modified;
}
public void Dispose()
{
Context.Dispose();
}
public int SaveChanges()
{
return Context.SaveChanges();
}
public T FindById(int id)
{
return Context.Set<T>().Find(id);
}
}
public LettersRepository : EFRepository<Letter>
{
public LettersRepository(DbContext context) : base(context) {}
// Override for case includes will be needed in future
public override List<T> Get()
{
return Context.Set<T>().ToList();
}
}
public FoldersRepository : EFRepository<Folder>
{
public FoldersRepository(DbContext context) : base(context) {}
public override List<T> Get()
{
return Context.Set<T>().Include("Letters").ToList();
}
}
将这些存储库设为 Lazy 是否有任何意义——这意味着它们将在第一次使用时被实例化?我一直在考虑这个问题,因为我不会在每次请求时都使用所有这些存储库,通常我只使用一个。
【问题讨论】:
-
您将通过一个网络与一个数据库通信。与实际执行查询和获取结果所需的时间相比,您为使类实例化速度加快任何纳秒而进行的任何优化不会有任何重大改进。
标签: c# entity-framework lazy-evaluation lazy-initialization