サーバーに何度も接続しているコードの小さなパッチを最適化しようとしています。まず、ここにコードのパッチがあります
Dim sale as Sale()
With sale
If .CustomerID > 0 Then
.CustomerName = CCCustomer.SelectByID(.CustomerID).FirstNameLastName
Else
.CustomerName = "Cash Sale"
End If
End With
したがって、問題は、たとえば 50 人の顧客が反復処理を行っている場合、データを処理するのに非常に長い時間がかかることです。各 customerID については、CCCustomer オブジェクトにアクセスし、データベースに接続し、 ID で顧客を選択し、オブジェクトから FirstNameLastName を選択します。
私が最初に考えたのは、すべての顧客のリストまたは配列をすぐに取り出して、ID で照合することでしたが、これにはさらに時間がかかるようです。
Dim sale as Sale()
With sale
Dim allCustomers() = CCCustomer.SelectAll
If .CustomerID > 0 Then
.CustomerName = Array.FindIndex(allCustomers, Function(c) c.CustomerID = .CustomerID)
Else
.CustomerName = "Cash Sale"
End If
End With
(このコードは、名前ではなく、customerId を返しますが、いずれにしても永遠に時間がかかります)
私が考えることができる他の唯一のオプションは、複数のストアドプロシージャを完全に書き直し、オブジェクトを更新して、顧客名と顧客IDをネイティブに保持することですが、残りを完全に引き裂く前にチェックインすることを考えましたプログラムの。
データベースからプルしているときに、このようなものに適切なロード時間を取得する良い方法を知っている人はいますか?
編集:申し訳ありませんが、私の側では説明が不十分でした-顧客を反復処理するのではなく、顧客オブジェクトを作成しています。だったらこんなのあったら……。
| SaleID | CustId | ... |
| 1 | 1 | ... |
| 2 | 1 | ... |
| 3 | 2 | ... |
| 4 | 1 | ... |
| 5 | 2 | ... |
次に、CCCustomer.SelectByID(1) を 3 回使用します。基本的に、firstnamelastname 情報を取得するために顧客オブジェクトを 3 回作成します。