English 中文(简体)
采用AsParallel()/平行。
原标题:Using AsParallel() / Parallel.ForEach() guidelines?

看看关于利用<条码>(AsParallel)(或的建议。 每一( 加速这一进展。

见以下方法一:

这份清单包括“美国、法国、阿根廷、法国、德国、法国、德国、德国、德国、德国、德国、德国、德国、德国、德国、德国、德国、德国、德国、德国、意大利、波兰、葡萄牙、罗马尼亚、西班牙、瑞典、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士 这种方法应当采用“美国、阿根廷、法国、阿根廷、加拿大、法国、德国、法国、德国、法国、德国、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、波兰、葡萄牙、罗马尼亚、波兰、波兰、葡萄牙、波兰、葡萄牙、波兰、波兰、葡萄牙、波兰、葡萄牙、罗马尼亚、波兰、波兰、波兰、葡萄牙、罗马尼亚、斯洛伐克、斯洛文尼亚、斯洛文尼亚、斯洛文尼亚、波兰、波兰、罗马尼亚、斯洛文尼亚、罗马尼亚、斯洛文尼亚、瑞士、斯洛文尼亚、斯洛文尼亚、斯洛文尼亚、斯洛文尼亚、斯洛文尼亚、瑞士、斯洛文尼亚、瑞士、斯洛文尼亚、瑞士、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞士、瑞士、瑞士、瑞典、瑞士、瑞士、瑞士、瑞典

private IEnumerable<string> Countries (string[] countriesAndAliases)
{
    var countries = new List<string>();

    foreach (var countryOrAlias in countriesAndAliases)
    {
        if (IsCountryNotAlias(countryOrAlias))
        {
            countries.Add(countryOrAlias);
        }
        else 
        {
            foreach (var aliasCountry in AliasCountryLists[countryOrAlias]) 
            {
                countries.Add(aliasCountry);
            }
        }
    }

    return countries.Distinct();
}

是否将这种平行化简单化,把它改为下文的内容? 使用<条码>AsParallel(<>>>>/代码>比此更为细微? 如果我使用<代码>Parallel。 每一(而不是foreach? 在将<条码>相平行时,我应当使用什么样的条码?

private IEnumerable<string> Countries (string[] countriesAndAliases)
{
    var countries = new List<string>();

    foreach (var countryOrAlias in countriesAndAliases.AsParallel())
    {
        if (IsCountryNotAlias(countryOrAlias))
        {
            countries.Add(countryOrAlias);
        }
        else 
        {
            foreach (var aliasCountry in AliasCountryLists[countryOrAlias].AsParallel()) 
            {
                countries.Add(aliasCountry);
            }
        }
    }

    return countries.Distinct();
}
最佳回答

几个要点。

仅撰写<代码>countriesAndAliases.AsParallel()是无用的。 AsParallel(>>>是Linq问询的一部分,该询问是在平行执行之后进行的。 部分是空的,因此根本没有使用。

通常,请恰foreach with Parallel。 每一(。 但是,人们不了解安全法! 你们都有。 页: 1 因为List<T>.Add本身并不安全。

因此,你应当这样做(欢迎,即 test,但汇编):

        return countriesAndAliases
            .AsParallel()
            .SelectMany(s => 
                IsCountryNotAlias(s)
                    ? Enumerable.Repeat(s,1)
                    : AliasCountryLists[s]
                ).Distinct();

http://www.ohchr.org。

你们必须再确定两点:

  1. IsCountryNotAlias must be thread safe. It would be even better if it is pure function.
  2. No one will modify AliasCountryLists in a meanwhile, because dictionaries are not thread safe. Or use ConcurrentDictionary to be sure.

有助于您的有益联系:

平行模式 方案拟订:了解和应用与“NET”框架4的平行模式

rel=“noreferer” 当我同时使用时。 如何? 如果Imp?

<>PS>/strong>: 你认为,新的平行特征并不像他们(和感觉)那样明显。

问题回答

我更喜欢使用另一个数据结构,如一套数据,供各别使用,然后使用“组成联盟”加以合并。

类似情况

public string[] ExpandAliases(string[] countries){
    // Alias definitions
    var apac = new HashSet<string> { "US", "FR", ...};
    ... 

    var aliases = new HashMap<string, Set<string>> { {"APAC": apac}, ... };

    var expanded = new HashSet<string>
    foreach(var country in countries){
        if(aliases.Contains(country)
            expanded.Union(aliases[country]);
        else{
            expanded.Add(country);
    }

    return expanded.ToArray();
}

注:代码应视为假编码。

这对我来说似乎是一种固有的连续作业。 各位再次这样做,都是通过一份示意图清单,并将其列入另一个名单。 平行图书馆将这样做,加之一个翻新和同步的楼梯,可能最终放慢。

另外,如果你不希望复制,你应当使用<代码>HashSet<string>





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签