私は1台のサーバーを監視するために永遠に実行する必要のあるサービスを持っています。そうするためには、私は5つのタスクをサービスで行う必要があります(現時点では5つ、数百になるでしょう)。OutOfMemory Exception C#スレッドを扱うとき
私は最大5スレッドのスレッドプールを作成しました。タスクを取得するためにスレッドが使用するキューがあり、各スレッドはそのタスクを処理してから再びエンキューします。キューには5つの小さい属性を持つオブジェクトが含まれています。
サービスは、私がこれを実行する行で、私はOutOfMemoryException例外を取得し、しばらくの間実行後:
ThreadPool.QueueUserWorkItem(currentJob.ProcessJob, (object)timeToWwait);
timeToWwait
がintであり、私はもうそれを使用しないでください。
コンテキストは、このようなものです:
ThreadPool.SetMinThreads(0, 0);
ThreadPool.SetMaxThreads(5, 5);
while (true)
{
bool processJob = false;
bool checkedFrontEnd = false;
_qLock.EnterWriteLock();
try
{
if (_jobQueue.Count > 0)
{
currentJob = _jobQueue.Dequeue();
// currentJob.IsActive = true;
// processJob = true;
}
}
finally
{
_qLock.ExitWriteLock();
}
ThreadPool.QueueUserWorkItem(currentJob.ProcessJob, (object)timeToWwait);
//currentJob.ProcessJob((object)timeToWwait);
_qLock.EnterWriteLock();
try
{
_jobQueue.Enqueue(currentJob);
}
finally
{
_qLock.ExitWriteLock();
}
あなたはどんな提案を持っていますしてください?
あなたの質問にあなたのタイトルとタグの署名を含めることについてのFAQを参照してください。私はそれを2回修正しましたが、2人の担当者はそれをやり直す価値はありません。 –