2017-02-06 3 views
1

私は既存の顧客を検索し、存在する場合はCustomerIDを返そうとしています。これは私が使用しているコードです:契約API CustomerIDの検索をスピードアップするには?

 var CustomerToFind = new Customer 
      { 
       MainContact = new Contact 
       { 
        Email = new StringSearch { Value = emailIn }        
       } 
      }; 
     var sw = new Stopwatch(); 
     sw.Start(); 
     //see if any results 
     var result = (Customer)soapClient.Get(CustomerToFind); 
     sw.Stop(); 
     Debug.WriteLine(sw.ElapsedMilliseconds); 

しかし、私はそれが使用できなくなるまで非常に遅いと感じました。たとえば、DEMOデータセットの場合、24GB RAMを搭載したi7-6700k @ 4GHzとSQL Server 2016 Developer Editionをローカルで実行するSSDでは、簡単な電子メール検索に3〜4秒かかります。しかし、私の生産データセットでは、10kの顧客記録があり、60秒以上の時間がかかります。

これは典型的な契約ベースの石鹸ですか?スクリーンベースの石鹸ははるかに速く、ほとんど瞬時に見える。 Microsoft Management StudioのデータベーステーブルでSQL selectを実行すると、即座に結果を返すこともできます。

電子メールアドレスが「[email protected]」の顧客が存在し、顧客IDを返す場合、より迅速に質問する方法はありますか?

+0

どのバージョンをお使いですか? –

+0

最新のv6.1を使用しています – AcumaticaGuy

答えて

1
  1. GetList代わりのGetを使用してみてください。これは、 "スムースの検索"シナリオに適しています。

  2. GetListを使用している場合は、使用しているエンドポイントによってはさらに2つの最適化があります。 Default/5.30.001エンドポイントにはGetListの2番目のパラメータがあり、これはfalseに設定する必要があります。 Default/6.00.001エンドポイントには2番目のパラメータはありませんが、ReturnBehaviorという追加のプロパティがエンティティ自体にあります。 OnlySpecifiedにそれを設定し、必要なフィールドに*Returnを追加し、このように次のいずれかの

    var CustomerToFind = new Customer 
    { 
        ReturnBehavior = ReturnBehavior.OnlySpecified, 
        CustomerID = new StringReturn(), 
        MainContact = new Contact 
        { 
        Email = new StringSearch { Value = emailIn } 
        } 
    }; 
    

またはOnlySystemに設定してから、完全な実体を要求するために返されたエンティティにIDを使用しています。

+0

素晴らしい方法です。 ReturnBehavior = ReturnBehavior.OnlySpecifiedは正常に機能します(答えにマイナーなタイプミス)。 – AcumaticaGuy

関連する問題