相关疑难解决方法(0)

F#:Asynch和Tasks以及PLINQ,哦,我的!

当F#出现时,我将对异步/并行编程领域的财富感到尴尬.这个问题答案可以很好地描述任务,并行LINQ和Reactive Framework之间的差异,但我想知道异步工作流如何适应图片.

如果我错了,请纠正我,但据我所知,asynch工作流将是使用IO绑定操作的最简单方法,特别是那些定义了AsynchXxx方法的操作,或者遵循BeginXxx/EndXxx模式.另一个优点是异步工作流可以组合,并且可以由其他异步工作流构建 - 这可以在程序结构的方式中提供很大的灵活性.

我想我需要帮助的是理解在什么情况下我会在F#代码中选择任务或PLINQ而不是异步工作流.我相信我读到任务并行库有更复杂的方法来平衡核心之间的负载.如果这是真的,那么对于需要并行操作的纯CPU绑定操作,Tasks可能是更好的选择.另一方面,PLINQ似乎主要是一种方便的方法来并行化与序列一起使用的现有代码.

最后,假设我对每种方法的优势的理解是正确的,将它们组合起来是否可行或可取?例如,也许可以从异步工作流中组合一系列操作,然后在执行之前将它们转换为Tasks.如果可能 - 甚至是个好主意.

f# multithreading

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

结合C#和C的优点/缺点

我正在考虑开发Winforms应用程序,它将使用c库来执行所有计算.我想使用C#,因为使用它开发GUI非常简单,而C则可以提高性能.结合这两种语言还有其他优点或缺点吗?

编辑:作为计算,我的意思主要是(但不限于)图形算法,如着色,dijakstra,最大流量; 我希望图表是巨大的,性能非常重要.

c c# dll winforms

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

托管代码可以像unmamanged一样快地执行计算吗?

我最近对不同的国际象棋引擎感兴趣.该领域有许多开放和封闭的资源项目.他们都是(大部分都是)用C/C++编写的.这是一个显而易见的事情 - 你有一个计算密集型的任务,你使用C/C++,所以你同时获得了可移植性和速度.这似乎是一个没有脑子的人.

但是,我想质疑这个想法.当.NET首次出现时,有很多人说.NET的想法不会起作用,因为.NET程序注定要超慢.实际上,这并没有发生.有人在VM,JIT等方面做得很好,现在我们在大多数任务中都有不错的表现.但不是所有的.微软从未承诺.NET适用于所有任务,并承认某些任务你仍然需要C/C++.

回到计算繁重的任务的问题 - 有没有办法编写.NET程序,以便它不会使用相同的算法执行比非托管代码更糟糕的计算?我对"不断"的速度损失感到满意,但是比这更糟糕的事情将成为一个问题.

你怎么看?我们能否接近托管代码中计算的非托管代码,或者非托管代码是唯一可行的答案?如果我们可以,怎么样?如果我们不能为什么?

更新:这里有很多好的反馈.我将接受最多投票的答案.

c# c++ performance unmanaged managed

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

标签 统计

c# ×2

c ×1

c++ ×1

dll ×1

f# ×1

managed ×1

multithreading ×1

performance ×1

unmanaged ×1

winforms ×1