小编Mej*_*ell的帖子

"foreach"会导致Linq重复执行吗?

我第一次使用.NET中的Entity Framework工作,并且一直在编写LINQ查询以便从我的模型中获取信息.我想从一开始就养成良好的习惯,所以我一直在研究编写这些查询的最佳方法,并得到他们的结果.不幸的是,在浏览Stack Exchange时,我似乎遇到了延迟/立即执行如何与LINQ一起使用的两个相互矛盾的解释:

  • foreach导致查询在循环的每次迭代中执行:

LINQ查询中显示有问题的慢foreach() - ToList()极大地提升了性能 - 为什么会这样?,暗示需要调用"ToList()"以便立即评估查询,因为foreach正在重复评估数据源上的查询,从而大大减慢了操作.

另一个例子是问题通过分组linq结果进行预测非常缓慢,任何提示?,其中接受的答案还暗示在查询上调用"ToList()"将提高性能.

  • foreach会导致查询执行一次,并且可以安全地与LINQ一起使用

显示有问题foreach只执行一次查询吗?,暗示foreach导致建立一个枚举,并且每次都不会查询数据源.

继续浏览网站已经出现了许多问题,其中"在foreach循环中重复执行"是性能问题的罪魁祸首,还有很多其他答案表明foreach将从数据源中适当地获取单个查询,这意味着两者都是解释似乎有效.如果"ToList()"假设不正确(因为美国东部时间2013-06-05 1:51 PM的大部分当前答案似乎都暗示),这种误解来自何处?这些解释中是否有一个是准确的,哪个不是,或者是否存在可能导致LINQ查询以不同方式进行评估的不同情况?

编辑:除了下面接受的答案之外,我对程序员提出了以下问题,这非常有助于我对查询执行的理解,特别是在循环期间可能导致多个数据源命中的陷阱,我认为对这个问题感兴趣的人有用:https://softwareengineering.stackexchange.com/questions/178218/for-vs-foreach-vs-linq

.net c# linq

30
推荐指数
3
解决办法
1万
查看次数

实现IDisposable - 一次性字段与一次性属性

我在我目前的一个项目上运行VS2013的代码分析,并且遇到了"CA1001:拥有一次性领域的类型应该是一次性的".生成警告(假定DisposableClass工具IDisposable)的简单示例是:

class HasDisposableClassField
{
    private DisposableClass disposableClass;
}
Run Code Online (Sandbox Code Playgroud)

但是,将字段变量转换为属性不再生成警告,即使情况是该属性将由类实例化:

class HasDisposableClassProperty
{
    private DisposableClass disposableClass { get; set; }
    public HasDisposableClassProperty()
    {
        disposableClass = new DisposableClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,很明显该类应该实现IDisposable模式,并disposableClass适当地处理它的字段.我的问题:第二种情况是否缺乏对代码分析工具的限制的警告?尽管没有警告,该班级是否仍然实施IDisposable并处置该财产?

c#

14
推荐指数
2
解决办法
1133
查看次数

标签 统计

c# ×2

.net ×1

linq ×1