我的工作流程有问题。我在项目中使用“State Machine Workflow”。随着时间的推移,越来越多的工作流程被创建,应用程重启项目应用程序正常后,但一段时间后应用程序再次缓慢工作
最大工作线程数
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个加载的工作流程,它的工作速度足够快。但是经过一段时间后,工作流程开始慢慢运行,我需要重新启动服务
如果有人遇到类似的问题,请告诉我