0

データベース内の約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()ループの外側、または実行ごとにオブジェクトを宣言するのは適切ですか?

4

3 に答える 3

3

これらの2つのケースでは、コードの意味がまったく異なります。なぜこの「パフォーマンス」の質問なのかわかりません...

オブジェクトがすべての反復で共有されている場合-外部で宣言して共有します。それ以外の場合は、ローカルで宣言します。

于 2012-07-12T23:12:24.670 に答える
2

私はそれをループの内側で宣言します。常に必要な正確なポイントですべてを宣言します。これにより、コードがすっきりとリファクタリングしやすくなります。

システムが遅すぎることに気付いた場合にのみ、パフォーマンスについて考える必要があります。次に、プロファイラーを使用して、パフォーマンスが遅い場所を見つけ、一度に1つずつ改善します。

于 2012-07-12T23:19:21.797 に答える
0

まあ、それはオブジェクトが何をするかに依存します。オブジェクトの状態がいずれかの時点で変更された場合、オブジェクトはループ内にとどまる必要があります。それ以外の場合は、一部の割り当てを保存するために外部で宣言できます。

于 2012-07-12T23:09:06.030 に答える