私の開発者の友人は、代理人を使ってループがはるかに高速であることを教えています。私はベンチマークをしたいと思いますが、どのように動作しているのかを点で結びつけています。このシナリオではどのように代理人を使用しますか?
以下の残高計算機を検討してください。これは基本的にアカウントのリストを受け取り、それが存在する場合、総クレジット値に存在し、各アカウントの合計借方値を減算した場合の初期値(開始バランス)を追加します。
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;
}
これはパフォーマンスかなりです小規模から中規模のアカウントリストでは、デリゲートを使用する方が高速でしょうか?そして、率直に言って、デリゲートロジックは私の思考プロセスに直角に動作しているように思えます。なぜなら、これを書いても私の頭を傷つけているからです。
誰もが代理人を使用してこれを書き換える方法を提供できますか?
参加者は、正確に何よりも速いと思われますか?ラムダのデリゲートを既に使用しています(明示的に作成していなくても、そこにあります)。あなたのループのどの部分を代理人に置き換えるのですか? – Sven
彼女はそれについて話していましたが、基本的にはループ内のすべてのものを代理人呼び出しで置き換えました。彼女が何を話しているのか分かっていたように、私は懐疑的な眉を上げた。 –
"デリゲートロジックは、私の思考プロセスに対して直角に動作しているようです"とは、機能プログラミング言語(F#など)でおもちゃプロジェクトを行い、 "思考のベクトル"が確実に正しい方向に向くようにすることです。 – dasblinkenlight