400 個までのビジネス オブジェクトのリストをハイドレートしようとしていますが、文字列をハイドレートする必要があると、パフォーマンスが非常に遅くなります。400 個のオブジェクトをハイドレートするのに 20 秒以上かかります。
編集
MySQL 5.1 と dotConnect for MySQL v5.0.12 をデータ プロバイダーhttp://www.devart.com/dotconnect/mysql/として使用しています。
問題の原因となっている文字列の種類に絞り込むために、いくつかのベンチマークを行いました。他のアセンブリの読み込みにかかる時間を無視するために、レコード 2 から n までの時間を測定し始めました。
次のコードは、0 ミリ秒で 1 つのオブジェクトをハイドレートします
objUserInfo.PortalID = portalId
objUserInfo.IsSuperUser = Convert.ToBoolean(dr("IsSuperUser"))
objUserInfo.UserID = Convert.ToInt32(dr("UserID"))
これも 0 ミリ秒で 1 つのオブジェクトを水和します
objUserInfo.PortalID = portalId
objUserInfo.IsSuperUser = Convert.ToBoolean(dr("IsSuperUser"))
objUserInfo.UserID = Convert.ToInt32(dr("UserID"))
objUserInfo.Firstname = "FirstName"
ただし、datareader オブジェクトを文字列に変換するとすぐに、平均 53 ミリ秒かかります
objUserInfo.PortalID = portalId
objUserInfo.IsSuperUser = Convert.ToBoolean(dr("IsSuperUser"))
objUserInfo.UserID = Convert.ToInt32(dr("UserID"))
objUserInfo.Firstname = Convert.ToString(dr("FirstName"))
私も2本の弦に水分を補給しようとしましたが、1本の弦ほどパフォーマンスを吹き飛ばしませんか?以下は、1 つのオブジェクトをハイドレートするのに平均 57 ミリ秒しかかかりません。
objUserInfo.PortalID = portalId
objUserInfo.IsSuperUser = Convert.ToBoolean(dr("IsSuperUser"))
objUserInfo.UserID = Convert.ToInt32(dr("UserID"))
objUserInfo.Firstname = Convert.ToString(dr("FirstName"))
objUserInfo.LastName = Convert.ToString(dr("LastName"))
多くの人が上記の構文を使用してビジネス オブジェクトをハイドレートしていることを知っています。これを行うためのより効率的/高速な方法はありますか?
編集 文字列でダイレクトキャストを行う別のテストを行ったところ、同じ遅い速度が生成されました:(キャストを行うためだけに53ms。
objUserInfo.FirstName = DirectCast("alex", String)