Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net NET JIT编译器会优化方法调用吗?_Asp.net_.net_C# 4.0_Clr - Fatal编程技术网

Asp.net NET JIT编译器会优化方法调用吗?

Asp.net NET JIT编译器会优化方法调用吗?,asp.net,.net,c#-4.0,clr,Asp.net,.net,C# 4.0,Clr,我从ASP.NET应用程序返回的堆栈跟踪是由ArgumentNullException生成的,给人的印象是在下面代码的最后一行出现了错误。就我所见,这是不可能的,但是如果JIT优化了对Bar的调用,这将导致不同的堆栈跟踪,这将解释所有问题。我确信它不是c#编译器,正如我所期望的那样。JIT编译器是否可能删除了对Bar的调用 c#4、.NET 4.0.30319.1、ASP.NET 4.0.30319.1 编辑: 我应该提到这是一个发行版配置,优化代码=on,调试信息=pdb Stack Trac

我从ASP.NET应用程序返回的堆栈跟踪是由ArgumentNullException生成的,给人的印象是在下面代码的最后一行出现了错误。就我所见,这是不可能的,但是如果JIT优化了对
Bar
的调用,这将导致不同的堆栈跟踪,这将解释所有问题。我确信它不是c#编译器,正如我所期望的那样。JIT编译器是否可能删除了对Bar的调用

c#4、.NET 4.0.30319.1、ASP.NET 4.0.30319.1

编辑: 我应该提到这是一个发行版配置,优化代码=on,调试信息=pdb

Stack Trace:

[ArgumentNullException: Value cannot be null. Parameter name: value]
CreateHiddenField(HtmlTextWriter tr, String name, String value) in Foo.cs:129
Foo(IHttpContext context, HtmlTextWriter writer) in Foo.cs:106

根据,如果抖动内联一个方法调用,它确实会在堆栈跟踪中折叠。如果您不想将其内联(这可能不是一个好主意),可以使用

[MethodImpl(MethodImplOptions.NoInlining)] 

在方法上。对于exe,您还可以使用INI文件通知抖动以生成跟踪信息(在链接页面的底部),但我不确定这对于ASP.NET应用程序是如何工作的

我从未见过JIT删除方法调用,只是将其内联。通常,它会删除未使用的局部变量,但我相当确定JIT不能静态分析调用方法的所有副作用,因此我认为它永远不会删除方法调用

我的猜测是,一个空值被传递给一个在
CreateHiddenField
内部调用的方法,该方法碰巧也有一个参数
。因为默认情况下内联是在发布模式下启用的,所以您不能真正信任堆栈跟踪(或发生异常的假定行号)。您的问题很可能存在于
CreateHiddenField
内部或不可见堆栈的更深处。:)


您可以禁用优化以更好地了解堆栈跟踪

你能提供堆栈跟踪吗?JIT可以内联一个符合要求的方法,这可能会导致它从堆栈跟踪中“消失”。。。我想,它就在那里,在第一个代码块中。我删除了名称空间/文件名以使其可读。你知道吗,我不认为这是堆栈跟踪,因为它太小了。我猜它是内联的,但我不知道编译器是否发出代码来保持“正确”的堆栈跟踪。堆栈跟踪是否带有任何行号或字节偏移量?
AuthorizationServerResponseDetailsHttpRequestParser
。。。不错:)@Joshua用堆栈跟踪中的行号和代码更新了那里。这正是我要找的,但我找不到。完美。URL证实了我的猜测,但我在搜索时找不到类似的文章。
[MethodImpl(MethodImplOptions.NoInlining)]