【发布时间】:2013-09-11 08:08:55
【问题描述】:
我已经阅读了一些关于 AOP 的文章,它看起来是一个非常有趣且功能强大的工具。
但是性能呢?
例如,如果我创建一个名为MyMethodAspect 的方面属性会怎样。它会做一件简单的事情 -
在开始执行具有该属性的方法时,称为 MyMethodAspect 类中包含的代码。比如写一行文字——'starting...'
这就是基本示例 - 但是如果在启动方法时执行的逻辑要困难得多怎么办。 我能理解在启动方法时执行的代码只编译一次,然后 AOP 就不需要任何额外的性能了吗?
C#:
public void Do(int x){
Console.WriteLine(x);
}
我认为 IL 类似于(几乎相同):
public void Do(int x){
Console.WriteLine(x);
}
和方面:
C#:
[MyMethodAspect]
public void Do(int x){
Console.WriteLine(x);
}
所以我想 IL 是这样的:
public void Do(int x){
Console.WriteLine("starting...");
Console.WriteLine(x);
}
MyMethodAspect 类真的只在编译阶段使用,之后就不需要任何额外的性能能力了吗?
我希望你能理解我的问题,我很难解释:)
谢谢
【问题讨论】:
-
好的,你知道任何可以在编译时完成所有工作的 AOP 框架吗?
-
Postsharp 进行后编译。它获取编译器的输出并对其进行修改 - postsharp.net/aspects/under-the-hood
-
后编译,但不在运行时 :) 这就是我想要的,也许我会尝试免费版本
标签: performance compilation aop