0

共通の .NET オブジェクトである OleDbConnection、XMLDocument、webBrowser を操作を行うメソッドに渡すメソッドがいくつかあります。ref/out キーワードなしでオブジェクトとして渡しています。お気に入り:

void btn_click()
{
  OleDbConnection dbConn; XMLDocument Doc; webBrowser Browser;

  // Do operations on dbConn, Doc and Browser here

  Call(dbConn, Doc, Browser);
}

void Call(OleDbConnection dbConn, XMLDocument Doc, webBrowser Browser)
{
  // Do operations on dbConn, Doc and Browser here

  Call2(OleDbConnection dbConn, XMLDocument Doc, webBrowser Browser);
}

void Call2(OleDbConnection dbConn, XMLDocument Doc, webBrowser Browser)
{
  // Do further operations on dbConn, Doc and Browser here
}

これらのメソッドは何千回も呼び出されるため、毎回オブジェクトが渡されます。プログラムは正常に動作しています。呼び出されたメソッドでオブジェクトがリセットまたは再初期化されることはなく、プロパティ データのみが使用されます。したがって、それらを「ref」として渡す必要はないと思います。

私の質問は、これらすべてを ref として渡すと、特にデータベース接続や Web ブラウザーのナビゲーションで、パフォーマンスが大幅に向上するかどうかです。オブジェクトが ref として渡される場合と渡されない場合のパフォーマンスの向上について説明している記事はありますか?

4

1 に答える 1

1

最初にあなたの質問に直接返信してください: いいえ、ref を使用しても大きな利益はありません: オブジェクトはすべて参照型です (こちらを参照してください: http://msdn.microsoft.com/en-us/library/t63sy5hs(v= vs.80).aspx ) であるため、独自の参照のみが関数に渡されます。

これとは別に、あなたのコードには同じパラメーターを使用するメソッドがたくさんあることがわかります。少しリファクタリングし、それらすべてのメソッドを (いくつかの) クラスにグループ化して、接続、xml を配置することを検討するのが賢明だと思います。クラスの属性としてドキュメントとブラウザ。コードがよりきれいになると思います。

于 2013-07-01T19:23:27.800 に答える