标签: plinq

使用 ConcurrentQueue 时,尝试在并行循环时出队

我在我的 .NET 4 应用程序中使用了并行数据结构,并且ConcurrentQueue在我处理它时添加了一个。

我想做类似的事情:

personqueue.AsParallel().WithDegreeOfParallelism(20).ForAll(i => ... );

当我调用数据库来保存数据时,我限制了并发线程的数量。

但是,我希望ForAll不会出队,我担心只是做

ForAll(i => {
    personqueue.personqueue.TryDequeue(...);
    ...
});
Run Code Online (Sandbox Code Playgroud)

因为不能保证我弹出正确的一个。

那么,我如何以并行方式遍历收集和出队。

或者,使用PLINQ并行进行此处理会更好吗?

concurrency pfx plinq c#-4.0

2
推荐指数
1
解决办法
6551
查看次数

这是PLINQ错误吗?

为什么PLINQ输出与顺序处理和Parallel.For循环不同

我想添加10,000,000个数字的平方根.以下是3个案例的代码:

顺序循环:

double sum = 0.0;
for(int i = 1;i<10000001;i++)
sum += Math.Sqrt(i);
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.717

现在使用Parallel.For循环:

object locker = new object();
double total ;

Parallel.For(1,10000001,
()=>0.0,
(i,state,local)=> local+Math.Sqrt(i),
(local)=>
{
  lock(locker){ total += local; }
}
);
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.7199

现在使用PLINQ

double tot =  ParallelEnumerable.Range(1, 10000000)
                .Sum(i => Math.Sqrt(i)); 
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.72

为什么PLINQ输出和Parallel.For和Sequential for loop之间有区别?

parallel-processing parallel-extensions plinq task-parallel-library

2
推荐指数
1
解决办法
244
查看次数

C#/ Linq中的二维数组总和

我有一个二维整数数组。我想编写一个优化且快速的代码来汇总二维数组的所有列。

有什么想法可以使用LINQ / PLINQ / TASK并行化来实现吗?

例如:

private int[,] m_indexes = new int[6,4]  { {367, 40, 74, 15},
                                           {535, 226, 74, 15}, 
                                           {368, 313, 74, 15},
                                           {197, 316, 74, 15}, 
                                           {27, 226, 74, 15},
                                           {194, 41, 74, 15} };
Run Code Online (Sandbox Code Playgroud)

linq plinq

2
推荐指数
1
解决办法
3824
查看次数

Plinq在单核心?

据我所理解:

利用多核或多处理器的编程称为并行编程.

但是,如果我没有 > 1个核心呢?

命令如下:

"abcdef".AsParallel().Select(c=>char.ToUpper(c)).ToArray()
Run Code Online (Sandbox Code Playgroud)

按顺序运行吗?

(我知道即使我有> 1个核心,Plinq优化仍然可以选择并行.但我的问题是关于= = 1个核心.)

要么

它仍然可以在多个线程(1核心)中,如:

在此输入图像描述

(但恕我直言,它不会是并行编程)

我有点困惑.非常感谢帮助.

.net c# .net-4.0 plinq

2
推荐指数
1
解决办法
366
查看次数

PLINQ和AsParallel()

这段代码有什么区别:

int[] tab = new int[] { 1, 2, 3, 4, 5 };

List<int> result1 = (from t in tab
                     where t > 2
                     select t).AsParallel().ToList();
Run Code Online (Sandbox Code Playgroud)

和这个:

List<int> result2  = (from t in tab.AsParallel()
                      where t > 2
                      select t).ToList();
Run Code Online (Sandbox Code Playgroud)

c# plinq

2
推荐指数
1
解决办法
205
查看次数

AsParallel-Linq子句执行之前和之后

我正在List<Boss>收藏,每个老板都有2到10个助理人员。我正在将所有员工(包括老板)分组。现在,我正在使用Parallel LINQList<Person>搜索“ Raj”,在Where子句之前或之后,可以在哪里放置支持方法以获得更好的性能?AsParallel()

public class Person
{
    public int EmpID { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }
    public string Gender { get; set; }
}

void Main()
{

    List<Boss> BossList = new List<Boss>()
    {
        new Boss()
        {
            EmpID = 101,
            Name = "Harry",
            Department = "Development",
            Gender = "Male",
            Employees = new List<Person>()
            {
                new Person() {EmpID = 102, Name = …
Run Code Online (Sandbox Code Playgroud)

c# linq plinq

2
推荐指数
1
解决办法
2355
查看次数

将此foreach循环转换为并行执行的正确PLINQ语法是什么?

更新2011-05-20 12:49 AM:foreach仍然比我的应用程序的并行解决方案快25%.并且不要使用最大并行度的集合计数,使用更接近机器核心数量的东西.

=

我有一个IO绑定任务,我想并行运行.我想对文件夹中的每个文件应用相同的操作.在内部,该操作导致Dispatcher.Invoke将计算的文件信息添加到UI线程上的集合.因此,从某种意义上说,工作结果是方法调用的副作用,而不是直接从方法调用返回的值.

这是我想要并行运行的核心循环

foreach (ShellObject sf in sfcoll)
    ProcessShellObject(sf, curExeName);
Run Code Online (Sandbox Code Playgroud)

这个循环的上下文在这里:

        var curExeName = Path.GetFileName(Assembly.GetEntryAssembly().Location);
        using (ShellFileSystemFolder sfcoll = ShellFileSystemFolder.FromFolderPath(_rootPath))
        {
            //This works, but is not parallel.
            foreach (ShellObject sf in sfcoll)
                ProcessShellObject(sf, curExeName);

            //This doesn't work.
            //My attempt at PLINQ.  This code never calls method ProcessShellObject.

            var query = from sf in sfcoll.AsParallel().WithDegreeOfParallelism(sfcoll.Count())
                        let p = ProcessShellObject(sf, curExeName)
                        select p;
        }

    private String ProcessShellObject(ShellObject sf, string curExeName)
    {
        String unusedReturnValueName = sf.ParsingName
        try
        {
            DesktopItem di …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing plinq

1
推荐指数
1
解决办法
1855
查看次数

并行ForEach在产生前等待500毫秒

我有这种情况:

var tasks = new List<ITask> ...
Parallel.ForEach(tasks, currentTask => currentTask.Execute() );
Run Code Online (Sandbox Code Playgroud)

是否有可能指示PLinq在下一个线程产生之前等待500ms?

System.Threading.Thread.Sleep(5000);
Run Code Online (Sandbox Code Playgroud)

.net c# plinq

1
推荐指数
1
解决办法
6971
查看次数

如何使用PLINQ并行化for-cycle?

我有一个任务是使用PLINQ并行化迭代.为此,我有一个基于for-cycle的功能:

public void PointGenerator(int n, Random rnd)
{
    for (int i = 1; i <= n; i++)
    {
        x = rnd.NextDouble(); 
        y = rnd.NextDouble(); // 
        if (((x - 0.5) * (x - 0.5) + (y - 0.5) * (y - 0.5)) < 0.25)
        {
            N_0++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能用PLINQ呢?

c# plinq

1
推荐指数
1
解决办法
77
查看次数

LINQ AsParallel()是否保持线程安全?

我对使用并发性有一些疑问LINQ AsParallel().

假设我有以下代码:

int counter = 0;
someList.AsParallel().ForEach(item => {
    doStuff();
    counter++;
});
Run Code Online (Sandbox Code Playgroud)

我没有找到太多在线...

做这样的事情是否安全?有没有更好的方法呢?

我应该做一些锁定动作counter吗?

提前致谢

c# linq plinq

1
推荐指数
1
解决办法
167
查看次数