小编Mar*_*377的帖子

使用AsParallel()/ Parellel.ForEach()指南?

寻找有关利用AsParallel()Parallel.ForEach()加快这一点的一些建议.

请参阅下面的方法(本例中简化/标准化).

它需要一个像"US,FR,APAC"这样的列表,其中"APAC"是50个其他"US,FR,JP,IT,GB"等的别名.该方法应采用"US,FR,APAC",并将其转换为"US","FR"列表以及"APAC"中的所有国家/地区.

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();
}
Run Code Online (Sandbox Code Playgroud)

是否将其并行化为将其更改为以下内容?使用AsParallel()比这更细微吗?我应该使用Parallel.ForEach()而不是foreach?并行化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 …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing multithreading

43
推荐指数
2
解决办法
5万
查看次数

函数声明只需要extern"C"吗?

我写了一个C++函数,我需要从C程序调用.为了使它可以从C调用,我extern "C"在函数声明中指定.然后我编译了C++代码,但编译器(Dignus Systems/C++)为该函数生成了一个错位的名称.所以,它显然没有尊重extern "C".

为了解决这个问题,我添加extern "C"了函数定义.在此之后,编译器生成了一个可从C调用的函数名.

从技术上讲,extern "C"唯一需要在函数声明中指定.这是正确的吗?(C++ FAQ Lite就是一个很好的例子.)你还应该在函数定义中指定吗?

这是一个证明这一点的例子:

/* ---------- */
/* "foo.h"    */
/* ---------- */

#ifdef __cplusplus
extern "C" {
#endif

/* Function declaration */
void foo(int);

#ifdef __cplusplus
}
#endif

/* ---------- */
/* "foo.cpp"  */
/* ---------- */

#include "foo.h"

/* Function definition */
extern "C"               // <---- Is this needed?
void foo(int i) {
  // do …
Run Code Online (Sandbox Code Playgroud)

c c++ extern extern-c

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

使用Win32线程模型时,MinGW-w64是否支持std :: thread开箱即用?

我在安装MinGW-w64工具链时选择了Win32线程模型,在阅读它之后提供了比POSIX更好的性能.我自己没有资格对此声明进行基准测试,但这里有一个来源.

起初我认为这个选项只会影响GCC运行时的内部工作,同时不会阻止我在我的代码中使用C++ 11线程,基于这个答案和其他用户rubenvb的评论. 但是,情况似乎并非如此.在MinGW-w64安装中似乎不存在支持.
std::thread

我从命令行调用g ++而没有其他选项-std=c++11.

此时我不确定是否:

  • rubenvb是错误的,实际上有必要在POSIX线程模型下安装MinGW-w64,以便编译依赖于C++ 11 thread库的代码,或者;
  • 我完全误解了这一切,或者;
  • std::thread 在我的场景中实际上是支持的,它只是不直观.

我强化了标题中的"开箱即用"部分.存在一个名为mingw-std-threads的库,如本答案中所示.但是,作为第三方选项,它与此问题无关.

那么,截至今天(2016年5月)std::thread,当与Win32内部线程模型一起安装时,MinGW-w64是否支持依赖代码?

c++ multithreading gcc mingw-w64 c++11

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

为什么将nullptr返回为std :: string时不是编译时错误?

由于存在一个错误,我刚刚发现该代码可以在Visual Studio 17以及其他编译器上正常编译。现在我很好奇为什么?

#include <iostream>
#include <string>

std::string foo(){
    return nullptr;
}

int main(){
    auto s = foo();
    std::cout << s << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我可以想象这是因为std::basic_string可以用a调用c'tor char*,同时返回从ptr到的隐式转换std::string(使用NULLas作为参数,然后变为poof)。我走对了吗?

c++ function stdstring language-lawyer

24
推荐指数
2
解决办法
1716
查看次数

使用-static-libgcc -static-libstdc ++进行编译仍会导致对libc.so的动态依赖

我正在尝试制作尽可能便携的可执行文件.删除一些依赖项后,我在另一个系统上运行二进制文件时遇到以下情况:

/lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.15' not found (required by foob)
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by foob)
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by foob)
Run Code Online (Sandbox Code Playgroud)

我更喜欢我的二进制文件不要求用户升级他们的libc版本,所以我也想删除这个依赖项.

生成上述二进制文件的链接器标志已包含在内-static-libgcc -static-libstdc++.为什么二进制文件仍然需要共享的libc.so.6

我也尝试添加-static标志,但是当我尝试运行二进制文件时,结果非常奇怪:

$ ls -l foob
-rwxr-xr-x 1 claudiu claudiu 13278191 Oct 10 13:03 foob
$ ./foob
bash: ./foob: No such file or directory
Run Code Online (Sandbox Code Playgroud)

该怎么办?

编辑:

$ file foob
foob: ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc glibc static-linking

23
推荐指数
1
解决办法
3万
查看次数

为什么静态构造函数没有任何参数

根据MSDN:

静态构造函数不接受访问修饰符或具有参数.

在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类.

无法直接调用静态构造函数.

任何人都可以解释为什么静态构造函数不能有参数.

.net c# oop static-methods

21
推荐指数
3
解决办法
2万
查看次数

是否有任何STL标头不属于C++标准库?

我知道一些C++标准库头文件来自STL,例如vector.但是我没有找到STL标题的最新列表,这些标题仍未被标准库合并.它们存在吗?

PS:我想列出它们,并且如果可能的话,还要知道所有主要实现是否包括它们或在何处获取它们.

c++ stl c++-standard-library

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

函数参数返回void或non-void类型

我正在为将来的库编写一些通用代码。我在模板函数中遇到以下问题。考虑下面的代码:

template<class F>
auto foo(F &&f) {
    auto result = std::forward<F>(f)(/*some args*/);
    //do some generic stuff
    return result;
}
Run Code Online (Sandbox Code Playgroud)

除非我将返回的函数传递给它,否则它将正常工作void

foo([](){});
Run Code Online (Sandbox Code Playgroud)

现在,当然,我现在可以使用一些std::enable_if魔术来检查返回类型,并对返回的函数执行专门化的操作void,如下所示:

template<class F, class = /*enable if stuff*/>
void foo(F &&f) {
    std::forward<F>(f)(/*some args*/);
    //do some generic stuff
}
Run Code Online (Sandbox Code Playgroud)

但这将完全复制实际上逻辑上等效的功能的代码。能否以一种优雅的方式,以通用的方式轻松地对- void返回和非void返回功能同时进行?

编辑:f()我想做的功能和通用的东西之间有数据依赖关系,所以我不考虑这样的代码:

template<class F>
auto foo(F &&f) {
    //do some generic stuff
    return std::forward<F>(f)(/*some args*/);
}
Run Code Online (Sandbox Code Playgroud)

c++ templates c++14

19
推荐指数
3
解决办法
842
查看次数

Django-使用unicode

为什么models.py中需要unicode函数?

def __unicode__(self)
    return sumid;
Run Code Online (Sandbox Code Playgroud)

python django

15
推荐指数
3
解决办法
2万
查看次数

在此上下文中不支持检查System.Reflection.MethodBase类型的调试对象中的对象的状态

我不知道这个错误意味着什么.我,正在使用visual studio for mac 7.5.0社区版.从我开始,我在asp.net核心的实体框架中使用延迟加载.

public partial class AdminUser
{
    public AdminUser()
    {
        RoleAssign = new HashSet<RoleAssign>();
    }

    public Guid UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string UserName { get; set; }
    public byte[] Password { get; set; }
    public DateTime CreatedTimeStamp { get; set; }
    public DateTime? ModifiedTimeStamp { get; set; }
    public DateTime? LogDate { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net entity-framework asp.net-core visual-studio-mac

15
推荐指数
2
解决办法
1437
查看次数