小编Tom*_*m A的帖子

将此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
查看次数

标签 统计

c# ×1

parallel-processing ×1

plinq ×1