【问题标题】:Task Parallel Library consuming lots of space on production server任务并行库在生产服务器上消耗大量空间
【发布时间】:2016-08-10 01:54:42
【问题描述】:

我正在使用-

Task task = new Task(delegate { GetRecordsForEmailReplies(headingList, partialEntity); });
task.Start();

运行一些繁重的方法,但问题是它消耗了大量的 服务器上的 CPU 空间一段时间 IIS 工作进程增加到 60% 以上 这就是服务器卡住的原因。

有解决这个问题的方法吗,请告诉我?或任何其他选项来运行这些繁重的方法而不阻塞页面加载?

【问题讨论】:

  • 不知道周围的代码很难说什么。您能否提供有关如何调用此方法以及如何调用此方法的更多信息?顺便说一句,开始任务的更好方法是使用Task.Run(() => GetRecordsForEmailReplies(headingList, partialEntity))
  • 从字面上看,您需要数百万Tasks 才能产生明显的 CPU 压力。无论您的问题是什么,它不会与 TPL 相关 - 这将是由于您的专有代码造成的。

标签: c# asp.net-mvc-4 task-parallel-library threadpool


【解决方案1】:

创建新的TaskTask<T> 的建议方法是将Task.Factory.StartNew.NET 4.0Task.Run.NET 4.5 一起使用。 Stephen Toub here对此话题有详细的解释。

他解释说效率更高:

例如,我们在 TPL 中非常注意确保当从多个线程同时访问任务时,会发生“正确”的事情。一个任务只执行一次,这意味着我们需要确保从多个线程同时多次调用任务的 Start 方法只会导致任务被调度一次。

同样,请改用Task.Run

Task.Run(() => GetRecordsForEmailReplies(headingList, partialEntity));

【讨论】:

  • 我严重怀疑这是否真的会产生重大影响。
  • 由于我是新来使用 Task,我还担心如果成千上万的用户一次访问相同的功能,这是否能够处理应用程序池?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多