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

时间:2012-07-12 23:05:36

标签: c# performance

我有一个并行循环,它检查数据库中大约1 mil的记录,并向数据库发送许多请求。我在每个并行循环迭代中重新声明新的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()对象是否合适?

3 个答案:

答案 0 :(得分:3)

在这两种情况下代码的含义完全不同,不确定为什么会出现这种“性能”问题......

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

答案 1 :(得分:2)

我会在循环中声明它。始终在所需的确切位置声明所有内容。它使您的代码更整洁,更容易重构。

如果您注意到系统速度太慢,那么只需考虑性能,然后使用分析器找出速度慢的地方,并一次改进一件事。

答案 2 :(得分:0)

嗯,这取决于对象的作用。如果对象的状态在任何时候都被改变,那么它需要保持在循环中。否则,您可以在外面声明它以节省一些分配。