创建对象或重复调用访问器是否更有效?

时间:2015-12-08 02:05:32

标签: c# performance

我是c#的新手,想知道哪个更有效,哪些是最佳做法。

例如,假设您发送了MouseEventArgs并且需要知道方法中多次鼠标的位置。在方法开头创建Point或不断调用X和Y访问器时,在空间和时间方面是否更有效?是否有时候一种方法比另一种方法更受欢迎?

代码示例:

private void table_MouseClick(object sender, MouseEventArgs e)
{
    DataGrid.HitTestType htt = table.HitTest(new Point(e.X, e.Y)).Type;
    ContextMenu cm = new ContextMenu();
    cm.Show(new Point(e.X, e.Y));

    //More methods requiring e.X and e.Y
}

VS

private void table_MouseClick(object sender, MouseEventArgs e)
{
    Point mousePosition = new Point(e.X, e.Y);
    DataGrid.HitTestType htt = table.HitTest(mousePosition).Type;
    ContextMenu cm = new ContextMenu();
    cm.Show(mousePosition);

    //More methods requiring mousePosition
}

3 个答案:

答案 0 :(得分:1)

创建一次值并重复使用它更有效,但不是很多。

在你的例子中,它根本没有任何区别。创建上下文菜单所需的时间比创建Point值长几千倍,因此您甚至无法衡量差异。

由于性能不是问题,请考虑哪种方式可以创建更易维护的代码。您可能会发现这是一次创建值的代码,因为它更容易阅读并降低您在某处出错的风险。

答案 1 :(得分:0)

总是取决于。您需要考虑很多因素。例如,在这种情况下,Point是一种值类型,与参考类型相比,我认为它是非常轻量级的。

在任何情况下,除了配置文件之外,没有其他黄金法则。如果有明显的差异,那么坚持使用最适合您的方案。如果没有,请按照自己最喜欢的方式做。

答案 2 :(得分:0)

代码质量需要考虑几个方面。其中一些要记住的关键是维护,代码重用,内存占用。

对于维护,重用事物,特别是文字和简单的对象,如Point对象,可以节省大量的时间和心痛。此外,当您创建对象时,它基本上是对其属性的引用。因此,您可以通过声明这样一个不会在整个算法中发生变化的点来保存,尽管只需要很少的内存。

长话短说,创建一个重用同一个对象的习惯会更有利,就像创建新实例一样(在可能的情况下,你会遇到某些例外情况)。

注意:

此外,@ Guffa指出,某些对象(如Point)来自结构而不是类,因此像字符串和数字类型这样的基元将按值发送(基本上是复制的),除非通过引用专门发送“ref”关键字。