声明循环内或循环外的对象



我有一个并行循环,它检查数据库中大约100万条记录,并向数据库发送许多请求。我在每个并行循环迭代中重新声明新的DB对象。

DataSet ds = new psqlWork().getDataSet("SELECT * FROM z_sitemap_links");
DataTable dt = ds.Tables[0];
Parallel.ForEach(dt.AsEnumerable(), dr =>
{
    new Sitemap().runSitemap(dr[1].ToString(), counter);
    counter++;
});

在循环外或每次执行时声明new Sitemap()对象是否合适?

在这两种情况下,代码的含义完全不同,不确定为什么这个"性能"问题。。。

如果您的对象在所有迭代中都是共享的,请在外部声明并共享。否则在本地声明。

我会在循环中声明它。总是在需要的确切时间点声明所有内容。它使代码更整洁,更容易重构。

如果你注意到系统太慢,甚至只需要考虑性能,然后使用探查器来找出它慢的地方,并一次改进一件事。

这取决于对象的作用。如果对象的状态在任何时候都发生了更改,那么它需要保持在循环中。否则,您可以在外部声明它以保存一些分配。

最新更新