假设我们有3个班级:
Place,Contact,PhoneNumber课程。
在Place类下,我想要一个Contact类,但最好将PhoneNumber类保留在Contact类下。因此,在Place类中,通过首先获取Contact对象,然后是Contact对象下的PhoneNumber来到达PhoneNumber更合乎逻辑。
如果我经常需要从place对象获取PhoneNumber对象,请将PhoneNumber类保留在Contact类(Place.Contact.PhoneNumber)下,而不是直接在Place(Place.Contact)类下插入该对象导致任何性能问题?
为什么我问这个问题是这些范围问题在JavaScript中有很多性能影响。是否值得对变量范围如此偏执 - C#中的性能关系?
谢谢。
答案 0 :(得分:4)
在C#中,你不会看到很多关于琐碎的*属性getter和setter这样的性能问题。但是,如果没有分析,就不可能说这对你来说是否有问题。
在大多数情况下,对象图构造永远不会像在JavaScript中那样在C#中创建性能问题。
* 只返回对现有对象的引用且没有其他逻辑的属性。
答案 1 :(得分:2)
它会对性能产生影响,但不会引起问题。即时编译器将成员访问编译为直接指针计算(在加载程序集时计算了每个类的布局),因此C#中的成员访问速度比在JavaScript中快得多。
答案 2 :(得分:1)
除非这是为了让你的程序运行得稍快一点,你的程序清单上的绝对最后一站,并且“略微”我实际上意味着“微不足道”,在这种情况下,我不会担心它。
首先回答您的问题,是的,这可能会影响代码性能。显然,阅读ref.ref.prop
的代码需要的代码比ref.prop
要多一些。
但是,这会对代码性能造成很小的小影响,除非你在一个循环中多次读取这个属性2级,并且没有多少其他用处,在这个特定场景中有1或2个级别将与您可能正在执行的任何其他代码相比相形见绌。
在任何情况下,一般规则是以最明显的方式,最简单的方式和最易理解的方式编写代码,因此它首先易于编写且易于维护,这在长期内术语将导致更少的错误。
在某些时候,如果您的程序存在性能问题,并且您发现此特定代码是占用大部分时间的代码,那么然后,并且仅然后,你进去尝试优化该代码。