我有一个并行循环,它检查数据库中大约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()
对象是否合适?
答案 0 :(得分:3)
在这两种情况下代码的含义完全不同,不确定为什么会出现这种“性能”问题......
如果您的对象在所有迭代中共享 - 在外部声明并共享。否则在本地声明。
答案 1 :(得分:2)
我会在循环中声明它。始终在所需的确切位置声明所有内容。它使您的代码更整洁,更容易重构。
如果您注意到系统速度太慢,那么只需考虑性能,然后使用分析器找出速度慢的地方,并一次改进一件事。
答案 2 :(得分:0)
嗯,这取决于对象的作用。如果对象的状态在任何时候都被改变,那么它需要保持在循环中。否则,您可以在外面声明它以节省一些分配。