带有ref参数的c静态方法-一个好主意

本文关键字:一个 好主意 参数 ref 静态方法 带有 | 更新日期: 2023-09-27 17:59:11

我最近重构了一些代码,现在有了一个静态实用程序类,方法如下:

const int x = 1;
public static string doWork(ref DataTable dt)
{
    decimal total = 0;
    foreach (DataRow row in dt.Select("COST_ID = " + x))
    {
        decimal annual = decimal.Parse(row["Cost"].ToString());
        total += decimal.Round(annual, 2);
    }
    return String.Format("{0:C}", total);
}

为了清楚起见,我简化了这个例子。。。

我可能会经历这样做以及在ASP的代码后面调用doWork方法的不良影响吗。NET应用程序受到许多用户的攻击?有人知道或有参考资料,我可以在那里了解静态方法的性能如何?这会成为任何形式的瓶颈吗?

编辑:

是的,我很抱歉这不是一个很好的例子,所以让我们说一个更像这样的例子:

const int x = 1;
public static string doWork(ref DataTable dt)
{
    foreach (DataRow row in dt.Select("COST_ID = " + x))
    {
        row["Cost"] = 0.0;
    }
}

你的意思是A)我实际上甚至不需要ref,因为ref已经传递了Datatable,B)将所有调用"集中"到单个静态方法根本不会影响性能。

带有ref参数的c静态方法-一个好主意

您唯一需要通过ref传递引用类型(如Datatable)的时间是,如果您计划将参数分配给类的新实例。在这种情况下不需要Ref。按值传递。

ref关键字不用于性能目的。当您想更改另一个作用域中的变量指向时,就会使用它(简单地说)。在这种情况下,您对ref的使用是无关的,可能会在将来导致问题。

我对ref的经验法则是:如果你正在使用它,你可能不应该使用。

最后,为了回答您关于性能的问题:使用ref不会改变现有方法的性能包络


阅读您的编辑后,以下是您两个问题的直接答案:

  1. 正确,使用ref只会引起混乱,因为这不是它的预期用途(也不是为了性能)
  2. 正确,使用带有const ID变量的static方法不太可能以任何可衡量的方式提高您的场景的性能

AFAIK静态方法并不比实例方法慢。相反,它们实际上可能会稍微快一点,因为您不需要传递隐藏的this,也不需要进行虚拟调用。

DataTable已作为引用传递,因此不需要ref

对于您的方法,不需要"ref"关键字。

DataTable是通过引用传递内容的类实例。由于不更改对对象的引用,因此不需要"ref"关键字。

使用ref时,static方法根本不会提高性能。有关ref的更多说明,请参阅此。

相关文章: