C# 使用GenericResposity在linq到sql查询性能上的差异
假设我的数据层中有这样一个类 无需在数据层编写简单的单表选择,节省了大量时间,但我会后悔吗 编辑:@SkeetC# 使用GenericResposity在linq到sql查询性能上的差异,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,假设我的数据层中有这样一个类 无需在数据层编写简单的单表选择,节省了大量时间,但我会后悔吗 编辑:@Skeet 实际上,我已经在一个相当大的WCF/Silverlight LOB项目中实现了这种方法,而我们的服务器CPU似乎正在努力跟上。创建/销毁额外对象的额外工作不可能归因于使用常规方法的项目中cpu使用率的增加?您没有显示“通用存储库”从何处获取其上下文-我假设它正在创建一个新的,并代理dispose调用 如果是这样的话,它基本上应该是一样的-我已经有一段时间没有研究GetTable()和使
实际上,我已经在一个相当大的WCF/Silverlight LOB项目中实现了这种方法,而我们的服务器CPU似乎正在努力跟上。创建/销毁额外对象的额外工作不可能归因于使用常规方法的项目中cpu使用率的增加?您没有显示“通用存储库”从何处获取其上下文-我假设它正在创建一个新的,并代理dispose调用 如果是这样的话,它基本上应该是一样的-我已经有一段时间没有研究
GetTable()
和使用属性之间的区别了,但是如果属性只是调用GetTable
本身,我也不会感到惊讶。除此之外,没有真正的区别
重要的一点是,在这两种情况下,您仍在使用
IQueryable
,因此查询仍将转换为SQL-如果您的SelectAll
方法返回IEnumerable
,那将是灾难性的。您能在最后一行亮起灯吗?@Veer:如果该方法返回IEnumerable
,查询表达式将使用LINQ来处理对象,在过程中而不是在SQL中进行过滤等。我不会这么认为。。。但请将其配置为检查。
public class GenericRepository<TEntity> where TEntity : class
{
public MyDataContext DataContext {get;set;}
[System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
public IQueryable<TEntity> SelectAll()
{
return DataContext.GetTable<TEntity>();
}
}
using (GenericRepositry<MyTable> mytable = new GenericRepositry<MyTable>())
{
var myresult = from m in mytable.SelectAll()
where m.IsActive
select m;
}
using (MyDataContext ctx = new MyDataContext())
{
var myresult = from m in ctx.MyTable
where m.IsActive
select m;
}