VB - 这种可疑的做法的性能后果是什么?
问题描述:
我来自C#的背景,所以我还没有完全嗅到我的VB。
我在我们的代码库中遍历了这个练习,它是从未用于链接。
我想知道这会产生什么样的性能后果(如果有的话)。VB - 这种可疑的做法的性能后果是什么?
Public Function Save(ByRef myObj As MyBusinessObject) As MyBusinessObject
'Do save stuff
'Return object we just saved
Return myObj
End Function
'usage
myObject = Save(myObject)
答
我想知道,这可能会造成什么后果性能(如果有的话)。
您正在为变量添加一个额外的任务,但这并不会导致性能问题。它有效地只是在做这个C#:
public MyBusinessObject Save(MyBusinessObject myObj)
{
// Do save stuff
return myObj;
}
,然后调用:
myObj = Save(myObj);
这将重新设置变量引用,但它指向内存中的同一个对象,所以有一点后果。它是实例方法相当标准的做法,不过,因为它允许链接(你提到),即:
myObj.Load(...).DoSomething().Save()
如果你还没有链接,我怀疑这是由人谁不正确理解做调用方法时对象引用是如何工作的。
答
这种结构允许方法可能返回一个不同的对象,从它开始。我不知道这对于“保存”方法是有用的,但它有时可能对可能或不可变的对象有用,作为实现“写入时复制”语义的手段。例如,假设这个类是某种类型的集合。如果执行“添加”的正确方法是说“myThing = myThing.Add(newItem)”,并且明确未指定调用是否会改变并返回原始对象,或者是否会创建包含这些项目与新的一样,那么有些类实例可能会被标记为共享不可变的(在这种情况下,可能会有许多语义上不同的对同一个实例的引用),而另一些则被标记为unshared-mutable(在这种情况下,人们可以在不需要复制的情况下改变项目)。