- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在代码中广泛使用了 Parallel.Foreach,唯一的挑战是如何在 DEBUG 模式下使用可视化调试时使其串行化,以下是我们正在做的事情,请分享您的观点:
public static class ParallelOptionsWrapper
{
// Private instance of ParallelOptions
private static readonly ParallelOptions @ParallelOptions;
// Private constructor
static ParallelOptionsWrapper()
{
@ParallelOptions = new ParallelOptions();
#if DEBUG
// 1 is sequential
@ParallelOptions.MaxDegreeOfParallelism = 1;
#else
// -1 is unlimited
@ParallelOptions.MaxDegreeOfParallelism = -1;
#endif
}
public static ParallelOptions Instance() { return @ParallelOptions; }
}
使用方法如下:
Parallel.ForEach(EnumerableList, ParallelOptionsWrapper.Instance(), element =>
{
// Code to run in Parallel
}
在这种情况下,所有 Parallel.Foreach
调用都具有相同的 ParallelOptions 实例,在我看来应该没问题。
这安全吗?这样有效吗?
最佳答案
Is it safe?
是的。只要你不使用取消。
Is this efficient?
只不过是使用单独的实例(即删除所有静态
内容)。
所以这是可以接受的,但肯定不是一个好的做法。
您所需要的只是:
public static ParallelOptions StandardParallelOptions()
{
otions = new ParallelOptions();
#if DEBUG
// 1 is sequential
options.MaxDegreeOfParallelism = 1;
#else
// -1 is unlimited
options.MaxDegreeOfParallelism = -1;
#endif
return options; // separate instance for each loop
}
这将允许设置 CancellationToken 等。
关于c# - 使用 Parallel.Foreach 中的 ParallelOptions 在串行和并行操作之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28759162/
使用MSDN article上有关ParallelOptions.MaxDegreeOfParallelism的代码,我尝试了以下操作... ParallelOptions po = new Para
考虑此代码在具有 32 个内核的 CPU 上运行: ParallelOptions po = new ParallelOptions(); po.MaxDegreeOfParallelism = 8;
ParallelOptions 的成员之一是 CancellationToken,其值旨在在 Parallel.ForEach 的 lambda 函数中访问。 使用它需要在调用 Parallel.Fo
你好,我正在使用不同的 MaxDegreeOfParallelism 方法值进行“动态”多线程处理,但是每当我尝试更改大于 1 的 MaxDegreeOfParallelism 值时,它就会在控制台中
我们在代码中广泛使用了 Parallel.Foreach,唯一的挑战是如何在 DEBUG 模式下使用可视化调试时使其串行化,以下是我们正在做的事情,请分享您的观点: public static cla
我正在运行一个多线程循环: protected ParallelOptions parallelOptions = new ParallelOptions(); parallelOptions.Max
请建议哪种方法是正确的(如果有的话) 有效使用 ParallelOptions、TaskCreationOptions 和 Task.Factory.StartNew(() =>。 private v
我有一个 Windows C# WinForms 应用程序。我对默认任务调度程序在任务并行库中的并行类的行为方式感到困惑。当我在 ParallelForEach 方法中调用 Parallel.For
我是一名优秀的程序员,十分优秀!