2010-11-30 80 views
6

下午好,對MapPoint的多線程訪問?

正如我在另一篇文章中說過的,我必須計算出地圖中某些點之間的800萬最短時間/路徑距離,其座標已知。問題在於,雖然直線距離很容易計算,但是有人告訴我,單線程應用程序可能會遇到使用MapPoint計算這些距離的問題。問題是,我對多線程一無所知......我目前正在研究一個i7 - 720QM環境,所以我想使用所有4個內核來進行這些計算......是否有任何簡單的方法可以做到這一點在C#或C++?

非常感謝。

回答

3

如果您對多線程技術完全陌生,那麼我的建議是以BackGroundWorker組件爲出發點,並逐漸轉向更多的線程化線程概念。

如果您使用..net 4.0比任務並行庫提供了簡單的方法開始。

參見鏈接下面

TPL

BackGroundWorker

+0

我可以在MapPoint中使用TPL嗎?我可以並行處理循環嗎? – user2381422 2013-08-05 12:40:29

1

可能已經我是誰說,這需要很長的時間。 MapPoint的COM API是單線程的。並行計算多個路由的方法是啓動多個MapPoint,每個都在自己的線程上。

因此,對於你的四核,你將開始2-3線程。每個線程啓動自己的MapPoint,然後將其用於路由。每個核心你不會有一個MapPoint。另外,如果您觀看單個MapPoint計算路由,則操作系統開銷和I/O開銷也會增加,您會發現後續版本部分內部爲多線程,如果可用,則可能需要約1.5個內核。

還有很多需要注意的問題。 MapPoint自己的垃圾收集沒有針對批量路由計算進行優化。最簡單的解決方法是簡單地重新啓動每個MapPoint應用程序(每天至少一次,但可能更頻繁)。

此外,一些操作(文件打開似乎是主要的)不能由多個MapPoint一次調用。可能是因爲他們試圖打開相同的文件,但我沒有進一步調查。你將需要實現自己的鎖定機制來避免這種情況。

SAURABH對.NET 4的建議聽起來不錯:我還沒有使用.NET 4的多線程憤怒 - 我的MapPoint/.NET線程的經驗是與.NET 2

我不知道是什麼您的應用程序是,但是您是否知道我銷售的產品使用多處理器MapPoint進行批量路線距離/時間計算...... :-)

+0

你說MapPoint是單線程的。但Saurabh說我可以使用TPL。那麼誰在這裏? – user2381422 2013-08-05 12:41:11