【问题标题】:Question about LINQ2Sql performance in C#关于 C# 中 LINQ2Sql 性能的问题
【发布时间】:2009-09-01 22:55:23
【问题描述】:

从性能的角度来看,最好将每个使用 LINQ 的语句包装在 using() 语句中,还是声明一个类级实例并在每个方法中使用?

例如:

public void UpdateSomeRecord(Record recordToUpdate)
{
    using(var entities = new RecordDBEntities())
    {
        // logic here...
    }
}


private RecordDBEntities entites = new RecordDBEntities();
public void UpdateSomeRecord(Record recordToUpdate)
{
    // logic here...
}

或者这两种方式都没有关系?

谢谢!

【问题讨论】:

    标签: c# performance linq-to-sql


    【解决方案1】:

    using 语句可能会损害性能,因为它需要更长的运行时间,但在这种情况下,您不必担心。如果一个类型实现了IDisposable,它真的应该被包裹在using 语句中,这样它就可以自己清理。

    这个清理代码的运行时间当然比没有清理代码的时间长,这就是为什么我说using 语句需要更长的时间来运行。但这并不意味着您不应该拥有using 声明。我认为您应该使用using 语句,即使它可能需要更长的运行时间。

    我想我想说的是,您在这里将苹果与橙子进行比较,因为性能比较只有在被比较的代码产生相同的输出和相同的副作用时才有意义。你的例子没有让我为什么我不认为这是一个性能问题。

    这种情况下的最佳实践是对实现IDisposable 的类型使用using 语句,而不管using 语句会使方法运行时间更长。如果您需要知道如何它会运行多长时间,那么您应该使用分析器来确定有问题的代码是否会造成瓶颈。

    【讨论】:

    • 好吧,这有点道理。我发布的代码来自我正在构建的接口,但它没有实现 dispose 方法。我想我可以添加它并在主要部分中调用它,但是从长远来看,将每个段包装在自己的 Using 语句中以处理处理会更好,对吗?
    • 我想我的问题格式不正确。也许是最佳实践:C# 中 LINQ 查询的最佳实践是什么?
    • 如果IDisposable 的实现尚不存在且不需要,则不要添加。如果您不需要处理任何非托管资源,那么您就不需要接口! :) 更多信息请阅读msdn.microsoft.com/en-us/library/system.idisposable.aspx
    【解决方案2】:

    事实上,您的问题是关于 LINQ DataContext 的生命周期管理。

    你不妨看看下面的文章:Linq to SQL DataContext Lifetime Management

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-03
      • 2011-05-28
      • 1970-01-01
      • 2022-09-24
      • 2021-03-04
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多