下面的代码在内置发行版模式(或优化debugging时)时运行方式不同,在没有附加Visual Studiodebugging器的情况下运行。 它也似乎只复制如果使用x86 JITter。 我已经在一台x86机器上testing了这一点,并在x64机器上的WOW64上运行(通过将平台目标设置为x86)。 我只用.NET 4.0试过。 在Release中debugging器外部运行时,看到: Value is 4 在debugging器内部运行时, WriteLine调用的e.Value.Length部分抛出NullReferenceException ,这是我期望发生的事情。 代码: namespace Test { class UsingReleasable<T> { public UsingReleasable(T obj) { m_obj = obj; } public T Release() { T tmp = m_obj; m_obj = default(T); return tmp; } public T Value { get { return m_obj; } } T m_obj; […]
为什么.NET 4.0中C#方法的即时编译顺序会影响它们执行的速度? 例如,考虑两个等价的方法: public static void SingleLineTest() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int count = 0; for (uint i = 0; i < 1000000000; ++i) { count += i % 16 == 0 ? 1 : 0; } stopwatch.Stop(); Console.WriteLine("Single-line test –> Count: {0}, Time: {1}", count, stopwatch.ElapsedMilliseconds); } public static void MultiLineTest() […]
在最近升级到.net 4.6之后,我们发现了一个错误,RyuJit产生了不正确的结果,现在我们可以通过在app.config中添加useLegacyJit enabled =“true”来解决这个问题。 我怎样才能debugging由以下产生的机器码? 我在VS 2015 RTM中创build了一个新的控制台项目,设置为释放,任何CPU,未选中首选32位,运行有和没有debugging器连接产生相同的结果。 using System; using System.Runtime.CompilerServices; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.WriteLine(Calculate()); Console.WriteLine(Calculate()); Console.ReadLine(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Value Calculate() { bool? _0 = (bool?)null; bool? _1 = (bool?)true; if (!Value.IsPresent<bool>(_1)) { return default(Value); } bool? result = null; result = (_1.Value ? […]
运行Java 1.6(1.6.0_03-b05)应用程序时,我添加了-XX:+PrintCompilation标志。 在某些方法的输出中,特别是我所知道的一些方法被调用了很多,我看到文本made not entrant并made zombie 。 这是什么意思? 最好的猜测是,在重新编译该方法或具有更大优化的依赖性之前,这是一个反编译步骤。 真的吗? 为什么“僵尸”和“进入者”? 例如,在这些行之间有相当多的时间: [… near the beginning] 42 jsr166y.LinkedTransferQueue::xfer (294 bytes) [… much later] 42 made not entrant jsr166y.LinkedTransferQueue::xfer (294 bytes) — n sun.misc.Unsafe::compareAndSwapObject 170 jsr166y.LinkedTransferQueue::xfer (294 bytes) 170 made not entrant jsr166y.LinkedTransferQueue::xfer (294 bytes) 4% jsr166y.LinkedTransferQueue::xfer @ 29 (294 bytes) 171 jsr166y.LinkedTransferQueue::xfer (294 bytes) [… […]
有一个(相对)众所周知的Perl公理,“只有perl可以parsingPerl”。 我想知道,对于Perl 6,这仍然是真的吗? 扩大讨论…鉴于最近PyPy的更新,我想到了这个问题。 Perl的独特的可parsing性排除了类似的努力吗? 在Perl代码(PPI?)的受限制的静态视图中是否有很多值? Perl 6可以有一个JIT编译器吗?* *我不确定这些概念是否相关。 他们?
如果我使用的只是一个方法中需要的常量,最好在方法范围内还是在类范围内声明const? 在方法中声明它有更好的性能吗? 如果这是真的,我认为在类范围(文件顶部)中定义它们以更改值和重新编译更为简单。 public class Bob { private const int SomeConst = 100; // declare it here? public void MyMethod() { const int SomeConst = 100; // or declare it here? // Do soemthing with SomeConst } }
我发现,当我向Python提出更多的要求时,python并没有使用100%的机器资源,而且速度也不是很快,与许多其他解释语言相比,速度很快,但是与编译语言相比,我认为差异真是了不起。 使用Python 3中的Just In Time(JIT)编译器可以加快速度。 通常JIT编译器是唯一可以提高解释语言性能的东西,所以我指的是这个,如果有其他解决scheme可用,我很乐意接受新的答案。
除了确保它们不能被改变(对编译器错误的调整)之外,JIT是否对const本地进行了优化? 例如。 public static int Main(string[] args) { const int timesToLoop = 50; for (int i=0; i<timesToLoop; i++) { // … } }
我看到很多人推荐使用JavaScript可视化工具包(The JIT)作为组织结构图。 我正在尝试使用JavaScript的InfoVis Toolkit的SpaceTree for组织结构图。 我的组织结构图中的节点本身就像一个组成部分,有员工个人资料图片,两个不同的图标,显示在点击覆盖和约3行简单的文本有名称,标题和报告数量…每行是分开的由一条轻的水平线。 就像是: 我的问题是,是否有可能自定义这样的spacetree节点? 我可以让Node几乎像另一个具有自己渲染方法的“组件”或JavaScript对象吗? 我研究论坛和我考虑的一些选项是: $ jit.ST.NodeTypes.implement()…但基于我看到的例子,这似乎在帮助定制节点的形状等方面,但不像上面绘制的布局。 我指的是自定义类似于: http : //groups.google.com/group/javascript-information-visualization-toolkit/browse_thread/thread/a4a059cbeb10ba23/ebf472366cdbbdef?lnk=gst&q=spacetree+nodetype#ebf472366cdbbdef 我尝试在example5.js中的onCreateLabel方法中设置innerHtml:但是它似乎什么都不做。 虽然,我不确定这是否会成为节点定制的好方法。 示例5在JIT网站(我不允许发布多个超链接) 扩展Graph.Node …我仍然看着这个选项,这个时间点,我不知道如何使空间树使用Graph.myNode是多么复杂,Graph.myNode甚至会是什么样子? 我需要更多地思考这些问题,看看是否可行。
微软最近发布了新的Phone 7平台的工具和文档,让那些拥有C ++代码库的人(像我一样)不再支持本地开发。 虽然我发现这个决定被推翻了,但我对此表示怀疑。 所以我在想,如何让这个代码库可以通过C ++ / CLI编译来实现Phone 7的可行性。 当然,用户界面部分无法移植,但我不清楚其余部分。 任何人都有类似的经历? 我不是在讨论那些低层次的代码 – 但是模板和智能指针的使用相当频繁。