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

mik*_*key 3 c# parameters methods static ref

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

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);
}
Run Code Online (Sandbox Code Playgroud)

我为了清晰起见简化了这个例子......

我可能会遇到任何不良影响这样做,并在ASP.NET应用程序背后的代码中调用doWork方法被许多用户击中?任何人都知道或有一个参考,我可以阅读有关静态方法的性能如何工作的方法?这会成为任何类型的瓶颈吗?

编辑:

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

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

你说的是A)我实际上甚至不需要这里的ref,因为Datatable已经通过ref和B传递了.通过"漏斗"对单个静态方法的所有调用来完全没有达到性能.

con*_*att 8

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


use*_*116 6

ref关键字不用于性能目的.当您想要更改另一个范围中的变量指向(简单来说)时,可以使用它.ref在这种情况下,您的使用是无关紧要的,并可能在将来导致问题.

我的经验法则ref是:如果你使用它,你可能不应该这样做.

最后,回答关于性能的问题:使用ref不会改变手头方法的性能范围.


阅读完编辑后,这里有两个问题的直接答案:

  1. 正确,使用ref只会导致混淆,因为这不是它的预期用途(并且它不用于性能).
  2. 正确,使用static具有constID变量的方法不太可能以任何可测量的方式改善您的方案的性能.