Tag: 内联

在C#中运行时内联?

关于C#的几个问题 C#是否支持运行时内联? JIT在执行代码之前或期间是否进行了优化? 虚拟函数可以内联吗?

C#会内联这些function吗?

我正在用C#编写一个性能关键的应用程序,核心操作是权重计算。 该函数如下所示: public void ForEachWeight(Action action) { for (int lower = 0; lower < LowerLayerSize; lower++) { for (int upper = 0; upper < UpperLayerSize; upper++) { action(lower, upper, Weights[(lower * UpperLayerSize) + upper]); } } } 它在几十个地方被调用,具有各种简单的function,如: if (activationMethod == ActivationMethod.Binary) { ForEachWeight((lower, upper, weight) => upperLayer.Values[upper] += weight; } else { ForEachWeight((lower, upper, […]

属性/方法内联和对reflection的影响

关于SO的问题之一的回答是由Valentin Kuzub评论的,他认为通过JIT编译器内联属性将导致reflection停止工作。 案件如下: class Foo { public string Bar { get; set; } public void Fuzz(Expression<Func> lambda) { } } Fuzz(x => x.Bar); Fuzz函数接受lambda表达式并使用reflection来查找属性。 这是HtmlHelper扩展中MVC的常见做法。 即使Bar属性被内联,我也不认为reflection将停止工作,因为它是对Bar的调用,内联和typeof(Foo).GetProperty(“Bar”)仍将返回有效的PropertyInfo 。 你能否证实这一点,或者我对方法内联的理解是错误的?

JIT拒绝内联微小的方法

我缺少严肃的优化,因为JIT不会内联我的很多方法。 例如,让我们有以下代码: static void Main(string[] args) { IsControl(‘\0’); } public static bool IsControl(char c) { return ((c >= 0 && c = 127 && c <= 159)); } 在JIT编译之后生成以下内容: 0000001f xor ecx,ecx 00000021 call FFFFFFFFFFEC9760 00000026 mov byte ptr [rsp+20h],al 0000002a nop 0000002b jmp 000000000000002D 0000002d add rsp,38h 00000031 rep ret 请注意, 0000001f是我设置断点的地方。 如你所见,在00000021有一个电话,这是绝对错误的。 为什么这么小的方法不适合内联? […]

我可以检查C#编译器内联方法调用吗?

我正在写一个XNA游戏,我在那里进行逐像素碰撞检查。 通过移位int和按位ORing来检查这种情况的循环通常很难阅读和理解。 我想添加私有方法,如private bool IsTransparent(int pixelColorValue)以使循环更具可读性,但我不希望方法调用的开销,因为这是性能非常敏感的代码。 有没有办法强制编译器内联这个调用,或者我会这样做,我只希望编译器会进行这种优化? 如果没有办法强制执行此操作,是否有办法检查方法是否内联,而不是读取反汇编? 如果内联并且没有其他调用者存在,该方法是否会显示在reflection中? 编辑:我不能强迫它,所以我可以检测到它吗?

在C#中内联CSS

我需要从c#中的样式表内联css。 就像这是如何工作的。 http://www.mailchimp.com/labs/inlinecss.php css很简单,只是类,没有花哨的选择器。 我正在考虑使用正则表达式(?(?[^{}]+){(?[^{}]+)})+从css中删除规则,然后尝试在调用类的地方做简单的字符串替换,但是一些html元素已经有了样式标记,所以我也必须考虑到这一点。 有更简单的方法吗? 或者已经用c#写的东西? 更新 – 2010年9月16日 如果您的html也是有效的xml,我已经能够提出一个简单的CSS内联器。 它使用正则表达式来获取元素中的所有样式。 然后将css选择器转换为xpath表达式,并在任何预先存在的内联样式之前将样式内联添加到匹配元素。 注意,CssToXpath没有完全实现,有些东西它不能做……但是。 CssInliner.cs using System.Collections.Generic; using System.Text.RegularExpressions; using System.Xml.Linq; using System.Xml.XPath; namespace CssInliner { public class CssInliner { private static Regex _matchStyles = new Regex(“\\s*(?(?[^{}]+){(?[^{}]+)})”, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled ); public List Styles { get; private set; } public string […]