C# 工作流运行缓慢

C# 工作流运行缓慢,c#,.net,multithreading,workflow,C#,.net,Multithreading,Workflow,我的工作流程有问题。我在项目中使用“状态机工作流”。随着时间的推移,创建的工作流越来越多,应用程序的工作速度也越来越慢。重新启动后,项目应用程序正常工作,但一段时间后,应用程序再次缓慢工作 最大工作线程数 int maxThreadinCore; if (!int.TryParse(ConfigurationManager.AppSettings["MaxThreadWorkflow"], out maxThreadinCore)) maxThreadinCore = 5; LogAda

我的工作流程有问题。我在项目中使用“状态机工作流”。随着时间的推移,创建的工作流越来越多,应用程序的工作速度也越来越慢。重新启动后,项目应用程序正常工作,但一段时间后,应用程序再次缓慢工作

最大工作线程数

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);
      }
while(avlThreads<10)
{
LogHelper.Instance().Log(LogLevel.Debug,
Format(“AvailableThreads={0}”,avlThreads));
GetAvailableThreads(out-avlThreads,out-avlPort);
睡眠(1000);
}
当我将MaxThreads设置为100时,应用程序使用100个加载的工作流,并且工作速度足够快。但一段时间后,工作流开始缓慢工作,我需要重新启动服务


如果有人有类似问题,请告知我

为什么需要第二个代码(“创建了大量工作流时”)?我认为当您的服务很慢时,代码中的这一部分只是无休止地执行。反复调用
GC.Collect()
会降低速度,除非在非常罕见的情况下,否则不应该调用它。此外,阻塞线程(
thread.Sleep(1000)
)一秒钟似乎毫无意义。在该代码段周围设置一个跟踪/日志并查看它是否在您的服务慢时不断执行。工作流基础不适用于“实时”应用程序。状态转换发生在一个单独的线程上。@M.a.哈宁谢谢你的回答。只有在没有免费工作流且我们正在等待新工作流的情况下,才能完成此代码。如果我们将删除此代码,将创建工作流,同时系统将关闭免费工作流,我们将收到消息AvailableThreads=0