2012-07-12 51 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

我會在循環中聲明它。總是在需要的確切點上宣佈一切。它使你的代碼更整潔,更容易重構。

如果您發現系統速度太慢,您甚至會考慮性能問題,然後使用探查器來找出緩慢的地方並一次改進一件事情。