【问题标题】:C# Do we have Performance Issue in having private variable instead of having them as method argumentsC# 我们在拥有私有变量而不是将它们作为方法参数时是否存在性能问题
【发布时间】:2021-03-31 17:21:52
【问题描述】:

==> 在我的类方法中,我使用 LINQ 查询(和其他处理语句)来派生一个值,并将其存储在类的私有字段中,例如 private int vendorId;

==> 这个私有变量vendorId 我在该类的其他方法中引用它。

我的查询 这会带来任何性能问题吗?

我应该将这些变量作为方法参数传递,而不是声明类级别的私有变量?

public class VendorHandler
{
   private vendorId;
   List<obj> vendorList;
   int businessId;
   ...

    public method GetVendorStandard()
    {
         ....
         this.vendorId= ....;
         ...
         MakePayment();
    }

    private void MakePayment()
    {
        string vendorCode = this.vendorId + ....;
        List<obj> list = this.vendorList;
        ...
    }

或者应该这样,vendorId(和其他方法参数)应该传递给MakePayment方法

private void MakePayment(int vendorId, List<obj> vendorList, int businessId)

如果我们在类中将它们声明为私有变量,会不会有任何性能问题?

【问题讨论】:

  • 视情况而定,但这通常不是好的设计。您将状态添加到您的处理程序/服务/经理/不需要的任何地方。通常,您会将需要在新类(及其对象)中传递的所有数据组合在一起,例如视图模型、DTO 等。
  • 无论如何,性能上的任何差异都将在纳秒内。甚至不要考虑这里的性能。相反,制定您的类和方法以充分反映您的业务逻辑。
  • 这是一个额外的指针 deref,我什至不会考虑它。如果您正在设计一个主要的类库以用于对性能敏感的代码的紧密循环,也许吧,否则忘记它

标签: c# oop


【解决方案1】:

简短的回答是。 . . 没有

唯一真正的区别是

  • 您的类的每个实例都带有大约 3 个新字段,因此需要一些额外的内存。
  • 您的方法现在更难测试了。

不过,真正的问题是设计问题:

这些值是每个此类实体(对象)实例的实际属性吗?

如果是,那么它们应该是类的属性。如果不是,则应将它们作为参数传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2022-11-21
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多