FastMemberを利用してリフレクションの高速化

顧客に導入しているc#で構築したシステムが遅いとの指摘を受け、リフレクションがボトルネックなのかと思い、高速化に関してネットで調べました。

色々調べると、FastMemberを利用すると、高速化できるとのことだったので、
導入し、速度を検証してみました。

1.FastMemberの導入

nugetで、FastMemberの最新版をダウンロードします。

2.リフレクションの変更

リフレクションは主に、DBからのデータを画面系のオブジェクトに変換する処理で
使用しています。DBのレコードは、3万件以上あり、さらに全プロパティのセッター/ゲッターににリフレクションを使っているので、非常に多くの処理にリフレクションを使用しています。

リフレクションはDotnet.Commons.ReflectionのObjectUtilクラスを利用しています。
以下は変更後のソースで、リフレクションをFastMemberのTypeAccessorクラスに変更しています。

3.経過時間の比較

Dotnet.Commons.ReflectionのObjectUtilクラスとFastMemberのTypeAccessorクラスとで、経過時間の比較してみました。約2倍くらい速くなっています。

リフレクションクラス 呼び出し回数 処理時間
ObjectUtil 45,332回 00:00:07.9593688
31,818回 00:00:06.4467155
TypeAccessor 45,332回 00:00:04.7315769
31,818回 00:00:03.3735334
Print Friendly, PDF & Email