- - PR -
ガベージコレクションについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-07-06 23:54
マシンA
Pentium4 3.0GHz 1.0GB WindowsXP Pro SP2 + IIS5.1 + .NET Framework1.1 SP1 SQL Server 2000 Dev SP4 マシンB Xeon 3.0GHz 3.0GB Windows Server 2003 SP1 + IIS6.0 + .NET Framework1.1 SP1 SQL Server 2000 Dev SP4 上記各マシンで6,000件のCSVデータを読み込みDBに更新を行うWebアプリケーション(C#)を作成し実行したところ、マシンAでは30分程度で終了します。その際タスクマネージャのプロセスタブで、ワーカプロセスのメモリ使用量を確認したところ、実行中は400,000K前後で推移しています。(MemoryLimit指定は60%) しかし、マシンBの場合は2時間近く経過しても終了せず、メモリ使用量も際限なく上昇していきます。(メモリリサイクルの指定無し) デバッグトレースしてみるとDataTableのSelectメソッドでかなりメモリ消費しているようです。 マシンBの場合ガベージコレクションが働いていないと思われます。この動作の違いの理由はどういうことが考えられるのでしょうか? ※ちなみにこのアプリケーションは業務に使用するものではありません。個人的な学習のための実験用です。 |
|
投稿日時: 2006-07-07 18:52
memoryLimit=20%に変えて(要再起動)再度試験してみてはどうでしょうか。
DataTable.Selectでは下記のような話もあります。 FIX:特定のフィルタ プロパティの一部を設定する場合、インデックスからのメモリを DataTable.Select メソッドがリークします。 |
|
投稿日時: 2006-07-07 22:09
返答有難うございます。
ご指摘のSelectメソッドの件は私も昨日の投稿前に発見し確認しましたが、IN句は使用していないので関係ないのかなと思います。また、マシンによって動作が違うという点からしても別の要因かなと思われます。 memoryLimitの件は一度試して結果ご報告します。 |
|
投稿日時: 2006-07-07 22:58
マシンBにデバッグモジュールを入れたままになってたりしませんか?
バッチっぽい処理の場合、デバッグモジュールとリリースモジュールとでは 性能に雲泥の差が出てしまいます。 誤ってデバッグモジュールをサーバに配布してしまうこともあると思うので、 確認しては如何でしょうか? |
|
投稿日時: 2006-07-07 23:33
私が試すとしたらですが、つぎの4つあたりを試してみます。
・片方の PC だけにハイパースレッディングなどがあればオフにしてみる。 ・とりあえず IIS 6.0 を IIS 5 互換モードで動かしてみてはどうでしょうか。 ・また、可能ならば、Web アプリケーションを、非 Web アプリケーションにしてみて動かして試してみてはどうでしょうか。 ・CSV の読み込みと DB への書き込みのどれかをやめてみる。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} |
1