私の開発者の友人は、デリゲートを使用するとループがはるかに高速になると言っています。それをベンチマークしたいのですが、それがどのように機能するかについて点をつなぐのに問題があります。
次のバランス計算機を考えてみましょう。これは基本的にアカウントのリストを取得し、存在する場合は初期値(開始残高)を合計クレジット値に追加し、各アカウントの合計借方値を減算します。
private static IDictionary<string, decimal> CalculateBalances(
IDictionary<string, decimal> initialValue,
IDictionary<string, decimal> credits,
IDictionary<string, decimal> debits)
{
var r = new Dictionary<string, decimal>();
foreach (var key in initialValue.Select(k => k.Key)
.Concat(credits.Select(k => k.Key))
.Concat(debits.Select(k => k.Key))
.Distinct())
{
r.Add(key,
(initialValue.ContainsKey(key) ? initialValue[key] : 0M)
+ (credits.ContainsKey(key) ? credits[key] : 0M)
- (debits.ContainsKey(key) ? debits[key] : 0M)
);
}
return r;
}
これは、小規模から中規模のアカウントリストではかなりパフォーマンスが高くなりますが、デリゲートを使用する方が高速でしょうか。そして率直に言って、デリゲートロジックは私の思考プロセスに対して直角に機能しているようです。なぜなら、これを書く方法さえ頭を悩ませているからです。
デリゲートを使用してこれを書き直す方法を誰かが提供できますか?