小编Aci*_*dic的帖子

编译器内联的getter和setter的概率

我的问题很简单:

问: Java中的编译器会将getter/setter方法内联的几率是多少?
(显然没有明确的答案,但其他信息将不胜感激)

额外:我知道编译器(标准和JIT)总是有可能决定内联方法,当涉及到getter和setter这通常是程序员想要的.

提前致谢.

java compiler-construction performance jit

8
推荐指数
1
解决办法
2567
查看次数

Windows窗体应用程序 - 视觉样式?

我会尽量保持这个简单.

在Windows窗体应用程序中创建的按钮如下所示:

在此输入图像描述

如果我手动创建表单,我创建的按钮将如下所示:

在此输入图像描述

我仔细查看了Windows窗体应用程序,发现没有任何代码可以改变按钮的视觉风格.

为什么会发生这种情况有什么简单的解释吗?

提前致谢.

c# visual-studio-2010

7
推荐指数
1
解决办法
3万
查看次数

对象类型转换的性能

Object Typecasting在性能方面有多昂贵?
我应该尽可能避免使用Typecasting吗?

java performance casting

6
推荐指数
3
解决办法
3904
查看次数

创建结构值的性能

我正在阅读Oreilly的Learning XNA 4.0,我注意到作者很容易创建一个结构值,例如Vector2Rectangle多次,而不考虑性能.

例如,SquareCollision()检查两个游戏实体之间的碰撞的方法在Rectangle每次调用时都会创建两个s,而不是简单地让每个游戏实体保持其自己的Rectangle字段并比较这些字段而不创建任何更多的结构值.

我在很多地方已经多次看到这种模式,这让我很奇怪:
在C#中,结构值的创建是否可以忽略不计?
这真的属于微优化部分吗?

也许是因为我的经验主要是Java,ValueTypes 的概念对我来说很奇怪,但似乎从结构中重新创建一个值(并且多次调用它的构造函数)似乎是对资源的巨大浪费.

c# xna struct

6
推荐指数
1
解决办法
1663
查看次数

价值类型优于参考类型的好处?

看到每次作为参数传递时都会创建值类型的新实例,我开始考虑使用refout关键字可以显示实质性性能改进的情况.

经过一段时间它打击了我,虽然我看到使用价值类型的不足,我不知道有什么好处.
所以我的问题很简单 - 拥有价值类型的目的是什么?我们通过复制结构而不是仅仅创建一个新的引用来获得什么?

在我看来,只有像Java一样的引用类型会容易得多.

编辑:只是为了清除它,我不是指小于8字节(参考的最大大小)的值类型,而是指8字节或更多的值类型.

例如 - Rectangle包含四个int值的结构.

c# value-type reference-type pass-by-reference pass-by-value

6
推荐指数
1
解决办法
3624
查看次数

具有绝对返回路径的方法如何内联?

我主要使用C#开发,但我认为这个问题也适用于其他语言.
此外,似乎这里有很多代码,但问题很简单.

根据我的理解,内联是编译器(在C#是虚拟机的情况下)通过在调用方法的每个位置插入方法体来替换方法调用.

假设我有以下程序:

static Main()
{        
    int number = 7;
    bool a;
    a = IsEven(number);
    Console.WriteLine(a);
}
Run Code Online (Sandbox Code Playgroud)

......方法的主体IsEven:

bool IsEven(int n) 
{
    if (n % 2 == 0) // Two conditional return paths
        return true;
    else
        return false;
}
Run Code Online (Sandbox Code Playgroud)

我可以理解在内联方法后代码的样子:

static Main()
{
    int number = 7;
    bool a;
    if (number % 2 == 0)
        a = true;
    else
        a = false;
    Console.WriteLine(a); // Will print true if 'number' is even, otherwise false
}
Run Code Online (Sandbox Code Playgroud)

一个明显简单而正确的程序.

但是,如果我调整IsEven …

c# inline

6
推荐指数
1
解决办法
184
查看次数

模块中的属性

有没有办法在TypeScript中定义属性module

这些都没有编译:

module My {
    // doesnt work
    get Value(): number { return 42; }

    // doesn't work either
    get function Value(): number { return 42; }

    // nope
    function get Value(): number { return 42; }
}
Run Code Online (Sandbox Code Playgroud)

现在我被迫使用这个:

module My {
    declare var Value: number;
    Object.defineProperty(My, "Value", {
        get: () => 42
    });
}
Run Code Online (Sandbox Code Playgroud)

第二种形式对我来说似乎很混乱,代码提示并没有真正将它视为只读属性而是作为普通变量.

有没有直接在模块内定义属性的标准方法?

properties accessor typescript

5
推荐指数
1
解决办法
4560
查看次数

Unix 时间 - 纳秒?

我当前使用此方法(C#)来获取以毫秒为单位的 Unix 时间:

long UnixTime()
{
    return (long) (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
}   
Run Code Online (Sandbox Code Playgroud)

问题- 有没有办法获得以纳秒为单位的unix时间?

提前致谢。

c# visual-studio-2010

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

超过两个缓冲区的优势?

当我在绘图时Canvas,我使用该createBufferStrategy(2)方法创建两个缓冲区.然而,我已经多次看到其他人创建三个缓冲区,并了解可以使用更多缓冲区.

我可以理解需要两个缓冲区,但我无法理解使用更多缓冲区的逻辑.

我的问题是 - 使用多个缓冲区的好处什么?与两个缓冲区相比,它会如何影响性能?

提前致谢.

java eclipse

4
推荐指数
1
解决办法
114
查看次数

为什么默认情况下不自动内联自动属性?

由于这些属性只是方法之下,可以理解的是,它们可能执行的任何逻辑的性能可能会或可能不会提高性能 - 因此JIT需要检查方法是否值得内联是可以理解的.

然而,自动属性(据我所知)不能有任何逻辑,只需返回或设置基础字段的值.据我所知,自动属性由编译器和JIT处理,就像任何其他方法一样.
(以下所有内容都依赖于上述段落正确的假设.)

值类型属性显示与变量本身不同的行为,但是参考类型属性应该具有与直接访问基础变量完全相同的行为.

// Automatic Properties Example
public Object MyObj { get; private set; }
Run Code Online (Sandbox Code Playgroud)

是否存在自动属性Reference Types可以通过内联显示性能受损的情况?
如果没有,是什么阻止编译器或JIT自动内联它们?

注意:我理解性能增益可能是微不足道的,特别是当JIT可能无论如何使用它时都可能内联它们 - 但是增益可能很小,似乎合乎逻辑的是,无论如何都会引入这种看似简单的优化.

c# compiler-construction jit inline

4
推荐指数
1
解决办法
1522
查看次数