インスタンス化手法


微差すぎて誤差が出てくるのだが、Double X/Yの二値を保持するクラス/構造体のインスタンス化だけでもちょっと差が出ることがある
cls:36.0053 ms
Struct New:8.0013 ms
Struct Create:33.0068 ms
Struct NoMethod:4.9823 ms

百万件で上記程度なので無視はできるか?
値の取得の仕方でも少しずつは処理時間が削られるので、細かく気を付けよう。

メソッドでインスタンス化が見栄えが良かったのでなんとなく使っていたが値渡しだから若干遅い。。
見栄えが大事な時もあるが。

速度はコストに依存、メンテナンスせいもコストに依存両方大事

10回 / 1hの操作として、1操作 [ 6秒 vs 1秒 ] × 8時間 = 400秒 / 日 = およそ日6分として200日で20h
自給1500円の人が操作の場合は、3万円 / 年 × 操作人数
単純計算だがこうしてみると速度は色々重い、特によくやる操作

速い分には文句は言われないので、このコードで良いかは常に考えるべき。
それはそれとして、メンテナンス性は重要、速度犠牲にしてもメンテナンス性が高い方がよい場合はある。

どっちとるかは経験と勘に依存している気がするが、体系化できるものであろうか。

一応試しコードは以下

クラス定義

  public class Pt_Class
  {
    public double X;

    public double Y;
  }//end class

構造体

  struct Pt_Struct
  {
    public double X;

    public double Y;

    public static Pt_Struct Create(double x, double y)
    {
      Pt_Struct result;
      result.X = x;
      result.Y = y;

      return result;
    }//end method
  }//end struct

速度比較処理

const int LOOPCOUNT = 1000000;

DateTime dt = DateTime.Now;

for (int i = 0; i < LOOPCOUNT; i++)
{
  Pt_Class cls = new Pt_Class() { X = 10, Y = 10 };
}

Console.WriteLine( "cls:" + (DateTime.Now - dt).TotalMilliseconds.ToString() + " ms" );
dt = DateTime.Now;

for (int i = 0; i < LOOPCOUNT; i++)
{
  Pt_Struct st = new Pt_Struct { X = 10, Y = 10 };
}

Console.WriteLine("Struct New:" + (DateTime.Now - dt).TotalMilliseconds.ToString() + " ms");
dt = DateTime.Now;

for (int i = 0; i < LOOPCOUNT; i++)
{
  Pt_Struct st = Pt_Struct.Create(10, 10);
}

Console.WriteLine("Struct Create:" + (DateTime.Now - dt).TotalMilliseconds.ToString() + " ms");
dt = DateTime.Now;

for (int i = 0; i < LOOPCOUNT; i++)
{
  Pt_Struct st;
  st.X = 10;
  st.Y = 10;
}

Console.WriteLine("Struct NoMethod:" + (DateTime.Now - dt).TotalMilliseconds.ToString() + " ms");
カテゴリー: 開発 タグ: パーマリンク