嵌套Using语句影响性能

Din*_*h M 1 c# linq performance ado.net using

     using (var db1 = new DataBase1Entities())
        {
           using (var db2 = new DataBase2Entities())
           {
                var list = (from obj in db2.Table1
                            where !db1.Table2.Any(i => i.Table2Col == obj.Table1Col)
                            select obj).ToList();
           }
        }
Run Code Online (Sandbox Code Playgroud)

有谁知道如何从一个数据库表中检索值并将其与另一个数据库表进行比较?如果上面的代码是正确的,那么会导致性能问题吗?

Him*_*ere 5

您似乎不知道-statement 的using作用。实际上,它\xc2\xb4s只不过是一个try-finally块,其中在finally中\xc2\xb4s调用了Dispose. 所以你的代码被翻译成以下内容:

\n\n
DataBase1Entities db1 = null;\ntry \n{\n    db1 = new DataBase1Entities();\n    DataBase1Entities db2 = null;\n    try \n    {\n        db2 = new DataBase2Entities()\n        // do something with db2\n    }\n    finally \n    {\n        if(db2 != null) db2.Dispose(); }\n    }\n}\nfinally\n{\n    if(db1 != null) db1.Dispose();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,它\xc2\xb4s 不是using可能会或可能不会影响性能的因素,而是Dispose. 但是,您根本不应该为此烦恼,因为您必须致电Dispose. 不这样做是一个非常糟糕的主意 - 特别是如果由于任何性能问题而这样做。Dispose将释放任何非托管资源,例如文件处理程序。如果你\xc2\xb4不在那里调用它\xc2\xb4s根本没有办法释放这些资源,这可能会产生内存泄漏。

\n

  • 我没有投反对票,但我也不认为因为无法解释的投反对票,人们应该投赞成票。尝试理解否决票。就像:这可能是一个很好的解释,但它没有回答问题。 (3认同)