我有一个使用C#和.net 4.5的应用程序,可以在带有Windows 8.1的Intel Core i5系统上工作,但是当我发布该应用程序并安装在Windows 7 SP1上时,该Windows 7 SP1在具有Intel Pentium 4单核和.net 4.5的系统上运行.3应用程序无法完全正常工作。
我猜会导致此问题的代码部分使用了Parallel.Foreach。
我的应用程序也使用异步等待。
是Parallel.Foreach和async等待在多线程处理器上正常工作的吗?
如何在单核上使用该程序?如果需要替换代码,我应该使用什么?
最佳答案
TPL是Parallel.Foreach所利用的,它与线程而不是内核一起工作,这取决于操作系统来调度这些线程。单核处理器将简单地通过单核运行与Parallel.Foreach代码关联的线程。另一方面,异步/等待方法不会显式创建其他线程,而是在当前同步上下文上运行,并且仅在该方法处于 Activity 状态时才在线程上使用时间。同样,单核CPU应该处理异步/等待而不会出现问题。
话虽如此,由于与线程创建/管理相关的额外开销,使用Parallel.Foreach实际上可能会降低性能。如果代码不受CPU限制,那么Parallel.Foreach并不是最好的方法。
关于c# - 单核cpu上的C#并行和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29318242/