2012-07-12 53 views
0

我有一个并行循环,用于检查数据库中大约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()对象外循环,或在每次执行?

+4

runSitemap方法是否会突变状态或可以变为静态? – 2012-07-12 23:08:13

回答

3

代码的含义是在这些2箱子完全不同的,不知道为什么,这个“表演”的问题...

如果你的对象是在所有迭代间共享 - 声明外和共享。否则在本地声明。

0

那么,这取决于对象的功能。如果对象的状态在任何时候都改变了,它需要留在循环中。否则,您可以在外部声明它以节省一些分配。

2

我会在循环中声明它。总是在需要的确切点上宣布一切。它使你的代码更整洁,更容易重构。

如果您发现系统速度太慢,您甚至会考虑性能问题,然后使用探查器来找出缓慢的地方并一次改进一件事情。