对MapPoint的多线程访问?

时间:2010-11-30 13:51:47

标签: c# multithreading mappoint

下午好,

正如我之前在另一篇文章中所说,我必须计算地图中某些点之间的约8,000,000个最短时间/路径距离,其坐标是已知的。问题在于,虽然直线距离很容易(并且很快)计算,但是有人告诉我单线程应用程序在使用MapPoint计算这个距离时会遇到问题。问题是我对多线程一无所知......我目前正在研究i7 - 720QM环境,所以我想使用所有4个内核来进行这些计算......有没有简单的方法来做这个在C#或C ++中?

非常感谢。

2 个答案:

答案 0 :(得分:3)

如果你是多线程的新手,那么我的建议就是从BackGroundWorker组件开始,逐渐转向更多的线程概念。

如果你使用的是..net 4.0,那么任务并行库就可以让你轻松开始。

请参阅下面的链接

TPL

BackGroundWorker

答案 1 :(得分:1)

那可能是我说这需要很长时间。 MapPoint的COM API是单线程的。让它并行计算多个路由的方法是启动多个MapPoint,每个MapPoint都在自己的线程上。

因此,对于四核,您将启动2-3个线程。每个线程都会启动自己的MapPoint,然后将其用于路由。每个核心不会有一个MapPoint。除了操作系统开销和I / O开销之外,如果您观看单个MapPoint计算路由,您会发现后来的版本部分内部是多线程的,如果可用,则可以占用大约1.5个核心。

还有许多需要注意的问题。 MapPoint自己的垃圾收集未针对批量路由计算进行优化。最简单的解决方法是定期重新启动每个MapPoint应用程序(至少每天一次,但可能更频繁)。

此外,一些操作(File Open似乎是主要操作)不能同时被多个MapPoints调用。可能是因为他们试图打开同一个文件,但我没有进一步调查。您需要实现自己的锁定机制以避免这种情况。

Saurabh对.NET 4的建议听起来不错:我还没有愤怒地使用.NET 4的多线程 - 我的MapPoint / .NET线程体验是使用.NET 2.

我不知道您的应用是什么,但是您知道我销售的产品使用多处理器MapPoint进行批量路线距离/时间计算......: - )