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