新しいスレッドでタイマーを含むオブジェクトの実行を開始するには?
おそらく変更する必要がある以下のコードがあります。
class MemoryCleaner : IDisposable
{
private readonly static MemoryCleaner Instance = new MemoryCleaner();
private readonly Timer _memoryWatcher = new Timer(15 * 1000);
public Timer MemoryWatcher
{
get
{
return this._memoryWatcher;
}
}
public void Dispose()
{
_memoryWatcher.Elapsed -= memoryWatcher_Elapsed;
this._memoryWatcher.Stop();
}
private void memoryWatcher_Elapsed(object sender, ElapsedEventArgs e)
{
var currentProcess = Process.GetCurrentProcess();
var megaBytes = currentProcess.PrivateMemorySize64 / (1024 * 1024);
if (megaBytes > 100)
{
// force an immediate garbage collection to free some unused memory quickly; this is an expensive process!
GC.Collect();
}
}
internal static void Start()
{
// this should be created in a new thread
Instance.MemoryWatcher.Elapsed += Instance.memoryWatcher_Elapsed;
Instance.MemoryWatcher.Start();
GC.KeepAlive(Instance);
}
internal static void Stop()
{
Instance.Dispose();
}
}
私はそれを次のように使いたいです:
MemoryCleaner.Start();
// my memory thirsty code which generates so much garbage, e.g. downloads a document then disposes it.
MemoryCleaner.Stop();
すべきことは、新しいスレッドを作成し、そのスレッドで MemoryCleaner オブジェクトの新しいインスタンスを作成して、そのオブジェクトを開始することです。
どうすればそれが可能になるでしょうか?
背景情報: 基本的に、コードがすべきことは、メイン プロセスが使用するメモリを 15 秒ごとにチェックし、メモリ使用量が 100MB を超える場合はガベージ コレクションを強制することです。非常に多くのガベージが作成されるためです。
質問が明確であることを願っています。
ありがとう、