C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 51 を表示中)
■28283 / )  Re[9]: ガベージコレクションについて
□投稿者/ オショウ (60回)-(2008/11/22(Sat) 20:19:44)
2008/11/22(Sat) 20:23:10 編集(投稿者)

> 上記ソースを確認のためにタイマーを 100000 ではなく 1000 にし
> AutoReset を true にして、1時間近く動かし続けましたが
> 何の問題もなく動き続けてます。

  ガーベージの動作ですが・・・
  別件で・・・
  未検証ですが、1秒なら回収されませんでした。
  90秒〜120秒アクセスしなければ回収される
  頻度が高くなった記憶があります。

  因みに、VB6時代のActiveXをフォームに貼って一度
  動作させた後、長時間(2分以上)アクセスしない
  とフォームに貼ってあるActiveXすら回収されてし
  まいエラーとなったことがあります。

  原因を追究する時間が当時無かったので、タイマー
  中にダミーの空アクセスを行なうようにして回収さ
  れないように回避させたことがありました。

● 今回のケースで・・・
  100秒間隔のタイマーと言う設定は仕様的に可能でも
  問題が出ることが多分にあるので、1〜10秒とし
  てイベント内で回数をカウントし、所定回数イベン
  トが発生したら本来の処理を行なう。と言う風にす
  るのが最善かと。

  1秒間隔なら100回カウント
  10秒間隔なら10回カウント

  異論はあると思いますが、私はそうやって長時間の
  タイマー間隔の動作を保全しています。

  あと変数の宣言ですが、Auto変数はどうかと・・・
  クラス内でPrivate とかで宣言した方がよいと思い
  ますが。

  スレッドや別インスタンス空間からのアクセスがあ
  るならPivate Shared ですか・・・(VBの場合)

  AutoResetに影響があるかについては未確認です。
  あしからず。

以上。
返信 編集キー/


管理者用

- Child Tree -