题
我有,我想肯定是编译JIT(这就是所谓的即前右)的功能。是否有属性或组件的设置,将确保这一点?如果没有,那么我怎么能保证一个函数编译JIT?
谢谢!
修改强>
我想这样做是为了防止我的应用程序从一个丢失的引用程序崩溃所致。如果我的函数编译JIT,我可以将函数调用包引用缺少的组件在try ... catch块,并优雅地处理这种情况。
这是我的理解,有可能是时候整个类(甚至整个应用程序)可以实时编译 - 这将导致一个错误,我不可能赶上。
解决方案
如果我读这正确,则担心当一个类/方法首先编译发生的错误。这就要求界限的意识。这是一个额外的层来获得。
如果事情是“错SuspectType(即所需的组件没有加载),在下面的try / catch语句是没有用的,因为Scenario1()的Jitting本身会失败。
void Scenario1()
{
try
{
var x = new SuspectType();
...
}
catch (..) { ... }
}
它可以被改写为
void Scenario1a()
{
try
{
Scenario1b();
}
catch (..) { ... }
}
void Scenario1b()
{
var x = new SuspectType();
...
}
但是,每乔恩斯基特的评论,我不知道这是否保存了的CF x
其他提示
我可能会回答错误的问题,但它看起来像你主要是想能够拦截组件加载失败(整个班级被实时编译击败周围的调用的try / catch后卫但这是各地使用明确的警卫的副作用法调用)。
如果你想赶上,而不是指定周围的每一个可能的呼叫一个try / catch大会决议的困境,你可以只听全球AssemblyResolve事件,并装配加载失败响应(我们在这里谈论的.NET程序集,天然的DLL的负载故障会必须用不同的机制来跟踪)。
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += OnResolveFailure;
//...
}
static Assembly OnResolveFailure(object sender, ResolveEventArgs args)
{
//Do something here...
}
这样做的缺点是你不能做很多,除了寻找装配别的地方(或记录错误)。当解析失败未设置有卡合加载失败的这样特定和优美的逻辑。
这是东西,你的应用程序需要能够解决它自己,或者你现在在调试某种组件负载问题?
如果是后者,看看在融合日志。这是日志是通过可在运行时间和负载组件探测子系统生成的。
下面是一个文章: http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx