微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决带有ref参数的C#静态方法-一个好主意?

| 我最近重构了一些代码,现在有了一个带有以下方法的静态实用程序类:
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.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;
    }
}
您是在说A)我实际上甚至不需要在这里使用ref,因为Datatable已经由ref传递了,并且B)对该单个静态方法的所有调用都无法完全“降低”性能。     

解决方法

        
ref
关键字不用于性能目的。当您想要更改另一个作用域中的变量指向(简单地说)时,可以使用它。在这种情况下,您使用
ref
是多余的,并且将来可能会导致问题。 我对
ref
的经验法则是:如果您正在使用它,则可能不应该这样做。 最后,回答关于性能的问题:使用
ref
不会改变现有方法的性能范围。 阅读您的修改后,以下是您的两个问题的直接答案: 正确,使用ѭ2只会引起混淆,因为这不是其预期用途(并且不用于性能)。 正确,对ID变量使用
const
ID的
static
方法不可能以任何可衡量的方式提高性能。     ,        唯一需要通过ref传递引用类型(例如Datatable)的时间是,如果您计划将参数分配给类的新实例。在这种情况下,不需要引用。通过值传递它。     ,        AFAIK静态方法并不比实例方法慢。相反,它们实际上可能会更快一些,因为您不需要传递隐藏的ѭ9并可以进行虚拟调用。     ,        DataTable已作为参考传递,因此不需要ref     ,        对于您的方法,不需要\“ ref \”关键字。     ,        DataTable是通过引用传递的类的实例。由于您不更改对对象的引用,因此不需要\“ ref \”关键字。     ,        当您使用ѭ2时,7ѭ法根本不会提高性能。有关
ref
的更多说明,请参见此。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。