あるプロジェクトで 要素の少ないObjectを構造体でコーディングしました。
<StructLayout(LayoutKind.Explicit)> _
Public Structure struct_A
Public A As Integer
Public B As Short
End Structure
という感じで実装しました。PLから言われたいちゃもん(もとい注文)は、「構造体はC++/C#系の人は適切に使い分けるが VBerは馴染みがないのでStructは使わないでくれ」
反論しても不毛だと察して素直に(?)従ったのですが、そんなもんかなぁ。なんか違うぞ。ブツブツ...orz.
それはともかく、 要素数+ OverHeadが 20byte? 以下なら 構造体のほうがコストが低いと認識してます。
バウンダリーや参照のOffsetの関係が絡むので、ClassはStructに比べてインスタンス生成はコスト高になります。
どれ位の差があるのか気になったので計測してみました。 昨今は StopWatch Classが標準で付いているのでWrap測定が楽なので重宝します。
私の測定方法は, 1メソッドの測定時間から1秒間に処理できそうな回数を算出し、その回数をLoopでまわし、所要時間から逆算する方法で求めてます。
上記のInter/Short を構造体とClassで定義して測定すると new() に費やしたコストは
Class : 0.02 mSec
Struct: 0.006 mSec
となりました。これだけ明確に差が出るとは改めてビツクリ。
クラスと構造体は適時に使い分ける必要を実感した次第です。上記のPLさんは何を根拠に構造体を否定したのだろう。彼のいうように、VBerが不勉強であるならば、指導してあげるべきではないの?
単なる思い込みで判断している気がするのだが。