gpt4 book ai didi

c# - 传递对象的字段而不是整个对象本身是否小于 'expensive'?

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:16 25 4
gpt4 key购买 nike

考虑以下类:

public class Person
{
public String FirstName;
public String LastName;
public DateTime DateOfBirth;
public StaffType PersonType;
}

以及以下 2 个方法和方法调用:

public void DoSomethingWithPersonType(Person person)
{
TestMethod(person.PersonType);
}

(由 DoSomethingWithPersonType(person); 调用)

public void DoSomethingWithPersonType(StaffType personType)
{
TestMethod(personType)
}

(由 DoSomethingPersonType(person.PersonType); 调用)。

哪种方法效率更高?他们都像彼此一样“高效”吗?它没有什么区别,因为它只是传递了一个引用吗?还是传递的引用在某些方面有所不同?

我问的原因是因为我在当前项目中选择了第一个方法签名 - 我已经这样做了,因为在以后我们可能需要使用我们“人”的其他字段 - 所以更多易于扩展/适应的方法是我所拥有的 - 但它是更昂贵的方法吗?

编辑:注意 - 不言而喻,这些差异将是微不足道的,否则我已经遇到了性能影响足够明显让我采取行动的场景。这只是出于好奇。

最佳答案

在性能方面它们是相同的。在这两种情况下,您都传递了一个引用(具有相同的性能成本),并且在这两种情况下,您都从其中一个字段中获取了 PersonType 对象。

这里唯一的区别是在代码可读性/可维护性等方面。一般来说,方法最好只接受它们需要的信息。如果您只需要 PersonType,则只接受 PersonType。它允许更灵活地使用该方法。 (如果不是 Person 的东西有 PersonType 怎么办?)如果你认为你实际上需要的不仅仅是 person 类型而不是接受 Person 可能是合适的。

另请注意,即使此处存在差异,也肯定很小。您不应该根据运行成本来考虑每一个小想法。现在的电脑速度很快。即使是糟糕的算法在实践中也往往需要很少的时间来运行(从一个人的角度来看)。如果你的程序运行时间超过了它需要的时间,那么是时候开始寻找改进的地方了。您应该关注那些占处理器时间很大比例的代码区域(使用探查器识别)。网络通信(包括数据库调用)和其他 IO 往往是优化的良好目标。

另请注意,拥有公共(public)字段通常被认为是不好的做法。至少,您可能应该拥有公共(public)属性(property)。

关于c# - 传递对象的字段而不是整个对象本身是否小于 'expensive'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12731334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com