以下のコードでパフォーマンスを改善しようとしていますが、その方法はわかっていますが、どちらが最善のアプローチかはわかりません。最初のヒットには時間がかかりますが、その後のヒットはより速くなるはずです。ここで、T (T はクラス) をキャッシュし、キャッシュをチェックして "T" が存在するかどうかを確認します。存在する場合は、その関連情報 (NamedArguments) を取得し、NamedArguments のそれぞれを調べて、最後に基準が一致する場合は、先に進んで現在のプロパティの値を設定してください。
私はそれをより効率的かつパフォーマンス的にしたいだけです。何か案は?
var myProps = typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static).Where(prop => Attribute.IsDefined(prop, typeof(MyCustomAttribute)) && prop.CanWrite && prop.GetSetMethod() != null);
foreach (var currentProperty in myProps)
{
foreach (var currentAttributeForProperty in currentProperty.GetCustomAttributesData())
{
foreach (var currentNamedArgument in currentAttributeForProperty.NamedArguments)
{
if (string.Equals(currentNamedArgument.MemberInfo.Name, "PropName", StringComparison.OrdinalIgnoreCase))
{
currentAttribParamValue = currentNamedArgument.TypedValue.Value == null ? null : currentNamedArgument.TypedValue.Value.ToString();
// read the reader for the currentAttribute value
if (reader.DoesFieldExist(currentAttribParamValue))
{
var dbRecordValue = reader[currentAttribParamValue] == DBNull.Value ? null : reader[currentAttribParamValue];
// set it in the property
currentProperty.SetValue(val, dbRecordValue, null);
}
break;
}
}
}
}