c# - 是否应该避免使用 LINQ,因为它很慢?

标签 c# .net linq performance

<分区>

有人告诉我,由于 .net linq 太慢了,我们不应该使用它,并且想知道其他人是否得出了相同的结论,例如:

执行 1000000000 次非 LINQ 比较需要 1443 毫秒。
用 4944 毫秒完成 1000000000 次与 LINQ 的比较。
(慢 243%)

非 LINQ 代码:

for (int i = 0; i < 10000; i++)
{
    foreach (MyLinqTestClass1 item in lst1) //100000 items in the list
    {
        if (item.Name == "9999")
        {
            isInGroup = true;
            break;
        }
    }
}

执行 1000000000 次非 LINQ 比较需要 1443 毫秒。

LINQ 代码:

for (int i = 0; i < 10000; i++)  
    isInGroup = lst1.Cast<MyLinqTestClass1>().Any(item => item.Name == "9999");  

使用 LINQ 进行 1000000000 次比较需要 4944 毫秒。

我想可以优化 LINQ 代码,但我的想法是很容易获得非常慢的 LINQ 代码,并且不应该使用它。鉴于 LINQ 很慢,那么 PLINQ 也很慢,NHibernate LINQ 也很慢,因此不应使用任何类型的 LINQ 语句。

有没有其他人发现 LINQ 太慢以至于他们希望自己从未使用过它,或者我是否基于这样的基准得出了过于笼统的结论?

最佳答案

Should Linq be avoided because its slow?

没有。如果它不够快,应该避免。 不够快根本不是一回事!

与您的客户、管理层和利益相关者无关。 不够快非常相关。永远不要测量某物有多快;这没有告诉您可以用来作为业务决策基础的任何信息。衡量距离客户可接受的程度。如果可以接受,那就停止花钱让它变得更快;已经足够好了。

性能优化代价高昂。编写代码以供其他人阅读和维护是昂贵的。这些目标经常相互对立,因此为了负责任地使用利益相关者的钱,您必须确保您只花费宝贵的时间和精力对不够快

您发现了一种人为的、不切实际的基准情况,其中 LINQ 代码比其他一些编写代码的方法慢。我向您保证,您的客户一点也不关心您不切实际的基准测试的速度。他们只关心您发送给他们的程序是否对他们来说太慢了。我向你保证,你的管理层一点也不关心这个(如果他们有能力的话);他们关心的是您不必要地花费了多少金钱来制造足够快的东西,但速度却不明显,并使代码在这个过程中的阅读、理解和维护成本更高。

关于c# - 是否应该避免使用 LINQ,因为它很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3769989/

相关文章:

c# - 无法将 c# .Net Core 3.0 与 directx 9.0 依赖项链接起来

c# - 将两种方法重构为一种

Linq 到对象 : filtering performance question

.net - ASP.NET Core 禁用请求缓冲(不是响应缓冲)

.net - 使用 TFS SDK 显示项目历史记录窗口

c# - 使用linq比较两个文本文件?

c# - 仅在 IE 10 中无效的 ViewState

c# - 随机访问和 BinaryWriter?

c# - 矩形包含问题

c# - MVC 中的动态下拉列表