- PR -

ガベージコレクションについて

1
投稿者投稿内容
ペペ
会議室デビュー日: 2006/07/06
投稿数: 2
投稿日時: 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の場合ガベージコレクションが働いていないと思われます。この動作の違いの理由はどういうことが考えられるのでしょうか?

※ちなみにこのアプリケーションは業務に使用するものではありません。個人的な学習のための実験用です。
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2006-07-07 18:52
memoryLimit=20%に変えて(要再起動)再度試験してみてはどうでしょうか。

DataTable.Selectでは下記のような話もあります。

FIX:特定のフィルタ プロパティの一部を設定する場合、インデックスからのメモリを DataTable.Select メソッドがリークします。
ペペ
会議室デビュー日: 2006/07/06
投稿数: 2
投稿日時: 2006-07-07 22:09
返答有難うございます。
ご指摘のSelectメソッドの件は私も昨日の投稿前に発見し確認しましたが、IN句は使用していないので関係ないのかなと思います。また、マシンによって動作が違うという点からしても別の要因かなと思われます。
memoryLimitの件は一度試して結果ご報告します。
がんふぃーるど
ベテラン
会議室デビュー日: 2006/06/05
投稿数: 58
お住まい・勤務地: さいたま
投稿日時: 2006-07-07 22:58
マシンBにデバッグモジュールを入れたままになってたりしませんか?

バッチっぽい処理の場合、デバッグモジュールとリリースモジュールとでは
性能に雲泥の差が出てしまいます。
誤ってデバッグモジュールをサーバに配布してしまうこともあると思うので、
確認しては如何でしょうか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-07-07 23:33
私が試すとしたらですが、つぎの4つあたりを試してみます。

・片方の PC だけにハイパースレッディングなどがあればオフにしてみる。
・とりあえず IIS 6.0 を IIS 5 互換モードで動かしてみてはどうでしょうか。
・また、可能ならば、Web アプリケーションを、非 Web アプリケーションにしてみて動かして試してみてはどうでしょうか。
・CSV の読み込みと DB への書き込みのどれかをやめてみる。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
1

スキルアップ/キャリアアップ(JOB@IT)