【问题标题】:EndExecute in an AsyncCodeActivity Worfklow does not get invoked if there are too many activities如果活动过多,则不会调用 AsyncCodeActivity Worfklow 中的 EndExecute
【发布时间】:2013-03-22 20:23:11
【问题描述】:

我正在使用 Workflow 通过 ParallelForEach 运行并行 AsyncCodeActivities。当我这样做时,如果有大量活动(比如 1000 个异步活动),那么我在运行代码时会收到 System.OutOfMemory 异常。

当我通过调试我的代码对此进行更多研究时,我发现我的“EndExecute”方法并没有被一系列异步代码活动调用,即使它已经完成了它的过程。因此,内存不断堆积而没有被释放,最后引发 System.OutOfMemory 异常。 我试图将线程数减少到 8 个(我的机器中的处理器数),但即便如此我还是收到了异常。

请帮助我,我被这个问题困扰了一个多星期。我无法从其他任何地方找到解决方案。

【问题讨论】:

    标签: asp.net workflow-foundation-4


    【解决方案1】:

    如果您使用的是 .NET 框架 4.0,我认为通过调用 SetMaxThreads() 将最大线程池大小限制为较小的数字,会有所帮助。 您可以通过调用 GetMaxThread() 来获取默认的最大线程大小。

    目前抛出 OutOfMemory 异常,因为运行时会一直分配线程池线程,直到内存可用。

    您可能需要根据每个活动所需的内存调整此数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      相关资源
      最近更新 更多