定数的文字列


クエリをStringBuilderで結合する風潮
10倍遅い

気にするほどでもないが、メソッドが評価されることに無頓着にならない意識が必要だと思う。
APIの使い方一つで遅くなっていく事を意識するとGCが動かないようにとか色々考慮事項が増えるが
普段から考えておけばパターンが作れるので普段から考えておくよう意識づけておくと楽。

この例の場合はGCの方が心配 (動作すると動作が一瞬停止する)
あと改行コードがないと確認の時やりずらい。

この話とは無関係だが処理負荷上GCで楽観的にCOM解放をおこなうべきではない。

@string:1.0013
StringBuilder:11.0249

static void Main(string[] args)
{
  DateTime now = DateTime.Now;

  for (int i = 0; i < 10000; i++)
  {
    atString();
  }

  Console.WriteLine("@string:{0}", (DateTime.Now - now).TotalMilliseconds );
  now = DateTime.Now;

  for (int i = 0; i < 10000; i++)
  {
    stBulder();
  }

  Console.WriteLine("StringBuilder:{0}", (DateTime.Now - now).TotalMilliseconds);
}

static string atString()
{
  string test =
@"
SELECT
 OBJECTID
 ,JCODE
 ,KEN
 ,SICHO
 ,GUN
 ,SEIREI
 ,SIKUCHOSON
 ,CITY_ENG
 ,P_NUM
 ,H_NUM
 ,Shape
FROM
 JPN71";
  return test;
}

static string stBulder()
{
  StringBuilder sb = new StringBuilder();
  sb.Append("SELECT");
  sb.Append("  OBJECTID");
  sb.Append(" ,JCODE");
  sb.Append(" ,KEN");
  sb.Append(" ,SICHO");
  sb.Append(" ,GUN");
  sb.Append(" ,SEIREI");
  sb.Append(" ,SIKUCHOSON");
  sb.Append(" ,CITY_ENG");
  sb.Append(" ,P_NUM");
  sb.Append(" ,H_NUM");
  sb.Append(" ,Shape");
  sb.Append("FROM");
  sb.Append(" JPN71");
  return sb.ToString();
}
カテゴリー: 開発 タグ: パーマリンク