相关疑难解决方法(0)

什么时候有资格被CLR内联的方法?

我在应用程序中观察到了很多"堆栈内省"代码,这些代码通常隐含地依赖于它们的包含方法没有内联的正确性.这些方法通常涉及到:

  • MethodBase.GetCurrentMethod
  • Assembly.GetCallingAssembly
  • Assembly.GetExecutingAssembly

现在,我发现围绕这些方法的信息非常混乱.我听说运行时不会内联调用GetCurrentMethod的方法,但我找不到任何相关的文档.我曾多次在StackOverflow上看过帖子,比如这个帖子,表明CLR没有内联交叉汇编调用,但GetCallingAssembly 文档强烈指出不是这样.

还有备受诟病的人[MethodImpl(MethodImplOptions.NoInlining)],但我不确定CLR是否认为这是"请求"或"命令".

请注意,我要求从合同的角度来概述资格,而不是当前JITter的实施由于实施困难而拒绝考虑方法,或者JITter最终在评估交易后最终选择内联合格方法时权衡.我已经阅读了这个这个,但他们似乎更关注最后两点(有传递提到的MethodImpOptions.NoInlining和"异国情调的IL指令",但这些似乎是作为启发而不是义务呈现).

什么时候CLR 允许内联?

.net clr jit inlining

37
推荐指数
2
解决办法
4047
查看次数

获取开始和结束索引之间的数组最大值和最小值

我需要一种简单,轻量级的方法来获取双精度数组的最大值最小值.诀窍是我只需要数组中两个索引之间的最大值和最小值.

内置的arrayOfDoubles.Max()arrayOfDoubles.Min()无法工作,因为它们会检查整个数组.

此代码将不断运行,并且需要有点高效.也就是说,简单性和可读性比速度更重要.

这是获得两个索引之间的最大值和最小值的一种方法:

double[] array = new double[8] { 3, 1, 15, 5, 11, 9, 13, 7 };

int startIndex = 3;
int endIndex = 6;

// Get max and min between these two indexes in the array
double max = GetMax(array, startIndex, endIndex);
double min = GetMin(array, startIndex, endIndex);

Console.WriteLine("Max = " + max + ", Min = " + min);
Run Code Online (Sandbox Code Playgroud)

以下是GetMax的代码,GetMin …

c# arrays max min

2
推荐指数
1
解决办法
2156
查看次数

标签 统计

.net ×1

arrays ×1

c# ×1

clr ×1

inlining ×1

jit ×1

max ×1

min ×1