ワークフローに問題があります。プロジェクトで「ステート マシン ワークフロー」を使用しています。時間が経つにつれて、ますます多くのワークフローが作成され、アプリケーションの動作が遅くなります。再起動後、プロジェクト アプリケーションは正常に動作しますが、しばらくするとアプリケーションの動作が再び遅くなります
最大作業スレッド数
int maxThreadinCore;
if (!int.TryParse(ConfigurationManager.AppSettings["MaxThreadWorkflow"], out maxThreadinCore))
maxThreadinCore = 5;
LogAdapter.Instance().LogInfo("Config max Thread" + maxThread);
var maxThreadCount = maxThreadinCore;
if (Environment.ProcessorCount != 1)
{
maxThreadCount = (int)((maxThreadinCore* Environment.ProcessorCount) * .8);
}
var scheduler = new DefaultWorkflowSchedulerService(maxThreadCount);
大量のワークフローを作成する場合
while (loadedWorkfolows.Count > MaxThreads || totalMem > 1073741824)
{
Thread.Sleep(1000);
loadedWorkfolows = _runtime.GetLoadedWorkflows();
GC.Collect();
totalMem = GC.GetTotalMemory(false);
}
このコードは、無料のワークフローがなく、新しいワークフローを待っている場合にのみ完了する必要があります。このコードを削除すると、ワークフローが作成されますが、システムは無料のワークフローを停止し、AvailableThreads = 0 というメッセージが表示されます。
while (avlThreads < 10)
{
LogHelper.Instance().Log(LogLevel.Debug,
string.Format("AvailableThreads = {0}", avlThreads));
ThreadPool.GetAvailableThreads(out avlThreads, out avlPort);
Thread.Sleep(1000);
}
MaxThreads を 100 に設定すると、アプリケーションは 100 のロードされたワークフローを使用し、十分に速く動作します。しかし、しばらくするとワークフローの動作が遅くなり、サービスを再起動する必要があります
同じような悩みをお持ちの方がいらっしゃいましたらアドバイスお願いします