6

こんにちは、

別の投稿で以前に述べたように、座標がわかっているマップ内のいくつかのポイント間の約 8,000,000 の最短時間/経路距離を計算する必要があります。問題は、直線距離の計算は簡単 (かつ迅速) でしたが、シングル スレッド アプリケーションで MapPoint を使用してこの距離を計算すると問題が発生する可能性があるということです。問題は、私がマルチスレッドについて何も知らないということです...私は現在i7 - 720QM環境で作業しているので、これらの計算を行うために4つのコアすべてを使用したいと思います...これを行う簡単な方法はありますか? C# または C++ で?

どうもありがとうございました。

4

2 に答える 2

3

私のアドバイスよりもマルチスレッドにまったく慣れていない場合は、BackGroundWorker コンポーネントから始めて、徐々により一般的なスレッドの概念に切り替えてください。

また、..net 4.0 を使用している場合は、Task Parallel Library を使用すると簡単に開始できます。

以下のリンクを参照してください

TPL

バックグラウンドワーカー

于 2010-11-30T13:57:11.903 に答える
1

時間がかかると言ったのは私だったのかもしれません。MapPoint の COM API はシングル スレッドです。複数のルートを並行して計算する方法は、複数の MapPoint をそれぞれ独自のスレッドで開始することです。

したがって、クアッド コアの場合、2 ~ 3 スレッドを開始します。各スレッドは独自の MapPoint を開始し、それをルーティングに使用します。コアごとに 1 つの MapPoint はありません。OS のオーバーヘッドと I/O のオーバーヘッドと同様に、単一の MapPoint がルートを計算するのを見ると、それ以降のバージョンは部分的に内部でマルチスレッド化されており、利用可能な場合は約 1.5 コアを使用できることがわかります。

注意すべき落とし穴もたくさんあります。MapPoint 独自のガベージ コレクションは、バッチ ルート計算用に最適化されていません。これに対する最も簡単な回避策は、各 MapPoint アプリケーションを定期的に (少なくとも 1 日に 1 回、おそらくもっと頻繁に) 再起動することです。

また、一部の操作 (File Open がメインのようです) は、複数の MapPoint から一度に呼び出すことができません。おそらく同じファイルを開こうとしているのでしょうが、これ以上調査していません。これを回避するには、独自のロック メカニズムを実装する必要があります。

Saurabh の .NET 4 に関するアドバイスは良さそうです。私はまだ .NET 4 のマルチスレッドを怒って使用したことがありません。私の MapPoint/.NET スレッドの経験は .NET 2 です。

あなたのアプリが何であるかはわかりませんが、ルートの距離/時間のバッチ計算にマルチプロセッサ MapPoint を使用する製品を販売していることをご存知でしたか... :-)

于 2010-11-30T14:31:39.183 に答える