私はちょうどmappoint APIでコード経由で複数のルーティングを試みました。それはすべてうまく動作しますが、いくつかのルートは計算に非常に長い時間がかかります(18.5秒)。 MapPoint自体を使って同じルートを計算すると、2秒未満しかかかりません。MapPoint.Route.Calculate()はアプリ自体の計算よりもずっと遅いのはなぜですか?
上記の例では、私はドイツのウルムとマンハイムの間のルートを計算しました。
私はポップアップ(ないMapPoint.Route.Calculate()
を示した経路を計算するための別のMethodeのがあった覚えているが、私はそれを忘れてしまった。
誰もが計算を高速化する方法のアイデアを持っていますか?
挨拶
class CalculateTime : IDisposable
{
MapPoint.Application app;
MapPoint.Map map;
MapPoint.Route route;
public CalculateTime()
{
app = (MapPoint.Application)Activator.CreateInstance(Type.GetTypeFromProgID("mappoint.application"));
map = app.ActiveMap;
route = map.ActiveRoute;
}
public class Place
{
public string City { get; set; }
public string Street { get; set; }
public string Postal { get; set; }
public Place(string City = "", string Street = "", string Postal = "")
{
this.City = City;
this.Street = Street;
this.Postal = Postal;
}
}
public class Place
{
public string City { get; set; }
public string Street { get; set; }
public string Postal { get; set; }
public Place(string City = "", string Street = "", string Postal = "")
{
this.City = City;
this.Street = Street;
this.Postal = Postal;
}
}
public TimeSpan Calculate(Place From, Place To)
{
Stopwatch sw = new Stopwatch();
MapPoint.FindResults frFromCollection = map.FindAddressResults(City: From.City, Street: From.Street, PostalCode: From.Postal);
MapPoint.FindResults frToCollection = map.FindAddressResults(City: To.City, Street: To.Street, PostalCode: To.Postal);
object frFrom = frFromCollection[1];
object frTo = frToCollection[1];
route.Waypoints.Add(frFrom);
route.Waypoints.Add(frTo);
sw.Start();
route.Calculate();
TimeSpan time = new TimeSpan(0, (int)(route.DrivingTime * 24 * 60), 0);
route.Clear();
sw.Stop();
Marshal.ReleaseComObject(frFromCollection);
Marshal.ReleaseComObject(frToCollection);
Marshal.ReleaseComObject(frFrom);
Marshal.ReleaseComObject(frTo);
MessageBox.Show(sw.Elapsed.Seconds + "." + sw.ElapsedMilliseconds);
return time;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~CalculateTime()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
map.Saved = true;
Marshal.ReleaseComObject(route);
Marshal.ReleaseComObject(map);
app.Quit();
Marshal.ReleaseComObject(app);
}
}
}
Wowa
編集:私はちょうどこの試みた :コードを経由してウェイポイントを追加する MapPoint自体を介してROuteを計算します。これはまた極端に長くかかる。どういうわけか、それはウェイポイントと思われる問題ではなく、Calculate
Methodeの
EDITです:MapPointのは、すでにバックグラウンドで経路を計算するように見えます
。 Calculateを呼び出す前に数秒待って、ミリ秒単位で終了します。
私はここからメモリから移動します。MapPoint APIを使用してから数年経ちました)、しかし、私はあなたがAPIの指示を抑制することができると信じています。そうすることで大幅に速くなります。 また、マッポイントアプリケーションインスタンスを再利用し、毎回スピンアップしないようにする必要があります。これは遅いです。 –
@Marc Gravell: 'アプリケーションは一度だけ起動しています。私のストップウォッチはCalculte時間だけです。あなたはDirectionspaneを意味しますか? – Wowa