2011-08-29 8 views
3

私は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) 

答えて

4

私はこれが作成するかもしれないものの性能の影響(もしあれば)疑問に思って。

変数に余分な割り当てを追加していますが、実際にはパフォーマンスの問題が発生することはありません。それが効果的にちょうどこのC#のやっている:そして

public MyBusinessObject Save(MyBusinessObject myObj) 
{ 
    // Do save stuff 
    return myObj; 
} 

を、呼び出し:

myObj = Save(myObj); 

をこの変数の参照は、再設定しますが、メモリ内の同じオブジェクトを指すように設定し、そのほとんど影響があります。それは、連鎖することができますように、それはすなわち、(あなたが言及している)、しかし、インスタンスメソッドのためにかなり標準的なプラクティスです:

myObj.Load(...).DoSomething().Save() 

あなたは、連鎖していないとして、私はこれを正しく理解していない誰かによって行われた疑いがありますメソッドの呼び出し時にオブジェクト参照がどのように動作するか。

0

この種の構造では、メソッドが、開始したオブジェクトとは異なるオブジェクトを返す可能性があります。私はこれが "保存"メソッドには便利だとは知らないが、 "コピーオンライト"のセマンティクスを達成する手段として、変更可能であるかもしれないし、そうでないかもしれないオブジェクトで役に立つことがある。たとえば、そのクラスがある種のコレクションであったとします。 「追加」を行う適切な方法が「myThing = myThing.Add(newItem)」であり、呼び出しが変更されて元のオブジェクトが返されるかどうか、またはそれが含まれる新しいオブジェクトを作成するかどうかは明示的に指定されていません元のアイテムと新しいアイテムがある場合、いくつかのクラスインスタンスは共有不変としてマークされる可能性があります(この場合、同じインスタンスに対して多くの意味的に異なる参照を持つ可能性があります)。 unshared-mutable(その場合、コピーする必要なしに項目を変更することができます)。

関連する問題