Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套使用语句会影响性能_C#_Performance_Linq_Ado.net_Using - Fatal编程技术网

C# 嵌套使用语句会影响性能

C# 嵌套使用语句会影响性能,c#,performance,linq,ado.net,using,C#,Performance,Linq,Ado.net,Using,有人知道如何从一个数据库表中检索值并将其与另一个数据库表进行比较吗?如果上述代码是正确的,那么它会导致性能问题吗?您似乎不知道。实际上,它只是一个try-finally块,在finally中调用Dispose。因此,您的代码被转换为以下内容: using (var db1 = new DataBase1Entities()) { using (var db2 = new DataBase2Entities()) {

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

您似乎不知道。实际上,它只是一个try-finally块,在finally中调用
Dispose
。因此,您的代码被转换为以下内容:

     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();
           }
        }
因此,对性能可能有影响或没有影响的不是
使用
,而是
处置
。但是,您根本不应该为此烦恼,因为您必须调用
Dispose
。不这样做是一个非常糟糕的主意——特别是如果因为任何性能问题而这样做的话
Dispose
将释放任何非托管资源,例如文件处理程序。如果你不调用它,那么根本就没有办法释放那些可能会产生内存泄漏的资源。

你似乎不知道。实际上,它只是一个try-finally块,在finally中调用
Dispose
。因此,您的代码被转换为以下内容:

     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();
           }
        }

因此,对性能可能有影响或没有影响的不是
使用
,而是
处置
。但是,您根本不应该为此烦恼,因为您必须调用
Dispose
。不这样做是一个非常糟糕的主意——特别是如果因为任何性能问题而这样做的话
Dispose
将释放任何非托管资源,例如文件处理程序。如果您不调用它,那么根本无法释放那些可能会产生内存泄漏的资源。

如果您愿意,您当然可以删除嵌套。类似于(未经测试):

HashSet-bob;
使用(var db1=newdatabase1entities())
{
bob=newhashset(db1.Table2.Select(z=>z.Table2Col);
}
使用(var db2=newdatabase2entities())
{
var list=(来自db2.Table1中的obj)
其中!bob.Contains(对象表1Col)
选择obj).ToList();
}

您需要对它进行分析,以检查它是否更快。如果有速度方面的好处,很大程度上可能是由于使用了
哈希集而不是使用删除嵌套。如果愿意,您当然可以删除嵌套。例如(未测试):

HashSet-bob;
使用(var db1=newdatabase1entities())
{
bob=newhashset(db1.Table2.Select(z=>z.Table2Col);
}
使用(var db2=newdatabase2entities())
{
var list=(来自db2.Table1中的obj)
其中!bob.Contains(对象表1Col)
选择obj).ToList();
}

您需要对其进行分析,以检查它是否更快。如果有速度方面的好处,很大程度上可能是由于使用了
哈希集
,而不是删除了嵌套的using。

嵌套的
using
是使用多个
IDisposable
的常见模式。它不是
using
而是资源分配/freeing影响性能;另一个消耗资源的过程是
中的代码,使用
-“代码从db1检索数据并将其与db2进行比较”“影响性能”相对于什么?显然,执行代码需要时间。这里的问题是什么?
“影响性能”相对于基于上下文的什么
,可能与不使用嵌套使用相比。即,在第一个之外使用第二个
使用
。什么类型是
db1
?或者:这是哪种ORM?对于其他:。嵌套
使用
是使用多个
IDisposable
的常见模式。它不是
使用
,而是资源影响性能的分配/释放;另一个消耗资源的过程是
中的代码,使用
-“代码从db1检索数据并将其与db2进行比较”“影响性能”相对于什么?显然,拥有代码需要时间来执行。这里的问题是什么?
“影响性能”与基于上下文的内容相关,可能与不使用嵌套使用相比。即,在第一个之外使用第二个
。什么类型的
db1
?或者:这是哪种ORM?对于其余的:。我不知道,但是我+1。两者都不知道,但是因为我也+1。如果您检查
null
de应该是
DataBase1Entities db1=null;尝试{db1=newdatabase1entities();…}最后{if(db1!=null)db1.Dispose()};
。局部变量(
db1
db2
)不是用
null
初始化的,这就是为什么
if(db1!=null)
在当前的应用程序中不存在code@DmitryBychenko你是对的。正确地纠正了。我没有投反对票,但我也不认为由于原因不明的反对票,人们应该投反对票。试着理解反对票。比如:这可能是一个很好的解释,但它不能回答问题如果你检查
null
代码应该是
DataBase1Entities db1=null;试试{db1=newdatabase1entities();…}最后{if(db1!=null)db1.Dispose()};
局部变量(
db1
db2
)未使用
null
初始化,这就是为什么
if(db1!=null)
在当前的应用程序中不存在code@DmitryBychenko你是对的。正确地纠正了。我没有投反对票,但我也不认为因为原因不明的反对票,人们应该投赞成票。试着理解反对票。比如:这可能是一个很好的解释,但它不能回答问题。
HashSet<YourType> bob;

using (var db1 = new DataBase1Entities())
{
    bob = new HashSet<YourType>(db1.Table2.Select(z => z.Table2Col);
}

using (var db2 = new DataBase2Entities())
{
     var list = (from obj in db2.Table1
                 where !bob.Contains(obj.Table1Col)
                 select obj).ToList();
}