私は現在、PostSharpを使用してAOPパフォーマンスログを作成しています。ProfilerAspectsでいくつかの集約型を使用したいと思います。PostSharpを使用してコールスタック集約ロギングを行うにはどうすればよいですか?
私が興味を持っているのは、そのアスペクトで呼び出された最初の関数によるロギングの集計です。私はEntryAggregatedProfilerと呼ばれる側面を持っているしたいと思いますし、2つの方法AおよびB以下のように:うまくいけば、この例では、それを明確にする必要があります私は1つのエントリを作成するために私のプロファイラの側面を希望
[EntryAggregatedProfiler]
public int A(int depth)
{
Thread.sleep(100); // sleep 100 milliseconds
if (depth > 0) return depth;
return A(depth + 1);
}
[EntryAggregatedProfiler]
public int B()
{
Thread.sleep(50);
return A(0);
}
とき(0)が呼び出されます。 (0)次の形式でなければならないのログエントリ:
<function name="A">
<args>
<depth type="int">0</depth>
</args>
<function name="A">
<args>
<depth type="int">1</depth>
</args>
<callTime>105</callTime>
</function>
<callTime>210</callTime>
</function>
そしてB()の呼び出しが
<function name="B">
<args />
<function name="A">
<args>
<depth type="int">0</depth>
</args>
<function name="A">
<args>
<depth type="int">1</depth>
</args>
<callTime>105</callTime>
</function>
<callTime>210</callTime>
</function>
<callTime>265</callTime>
</function>
のような1つのログエントリを作成する必要があります第二に、私もしたいのですがこれは、クラスレベルで作成されているので、上記のように、しかし、AとBの両方を持つクラス内のメソッドと同じデザインパターンは:
[ClassEntryAggregatedLogger]
public class C
{
public int A(int depth)
{
.......etc......
}
だからCAへの呼び出しは、(0)およびCB()同様の生成すべきです結果は上記になります。