パフォーマンスを考えているコーディングしているだろうか?
私もできれば速く効率のよいコードが良いと
考えていたのだが、必ずしもそれが良いコードではないということを知った。
Donald Knutは「An Empirical Study of Fortan Programs」という論文の中
で、プログラムの4%未満が実行時間の50%以上を占めているとしている。
つまりプログラムのほんの4%が実行時間の大半を占めているので、プログラムを
コーディングする際にパフォーマンスを考慮してコーディングするのではなく
読みやすさメンテナンスを最優先コーディングすべきだと思う。
実際にプログラムが完成したところで実行して遅いと感じたらパフォーマンスの
ことを考えても遅くないと思う。実際にプロファイラなどを使ってどこの
箇所が実行を遅くしているのかを調べる必要がある。まあその箇所も全体の4%
を探しあててそこ改善すればだいたいOKになるはずだ。
なので最初からコーディングする際にパフォーマンスを意識して
全体を速くしても意味がないし効率が悪いし、パフォーマンスを意識して
読みやすさメンテナスが悪くなっては元も子ないのである。
コードチューニングのテクニックで「行数が少ない方が速い」という定説があるがこれは嘘である。
下の例
rei1:
for i =1 to 10
a[i] = i
end for
rei2:
a[1]=1
a[2]=2
a[3]=3
a[4]=4
a{5]=5
a[6]=6
a[7]=7
a{8]=8
a[9]=9
a[10]=10
行数が少ない方が速いのというならrei1のほうが速いと考えるだろうが
実際には
| 言語 |
rei1の所要時間 |
rei2の所要時間 |
| Visual Basic |
8.47 |
3.16 |
| Java |
12.6 |
3.23 |
である。驚きだろうがコードの行数を減らしたからといって速度には関係ないのである。
またコンパイラにもよって速度というのは変わってくるので、以前この方法で速くなったという
経験則はまったく通じないのである。
またこの続きはいつか書きたいと思う。
ジャン‐パオロ・D. ムズメキ マイク ルキダス Gian‐Paolo D. Musumeci Mike Loukides 砂原 秀樹 高橋 敏明 岡島 順治郎
オライリージャパン
売り上げランキング: 190235
おすすめ度の平均:

チューニングの初歩
第2版はすごい SolarisとLinux対応
ジャック シラジ Jack Shirazi 今野 睦 福与 直也 杉野 博史
オライリージャパン
売り上げランキング: 218786
おすすめ度の平均:

内容は良いんですが...
コードレベルのパフォーマンスチューニング
Accessにテーブル追加するサンプルです。
private void button1_Click(object sender, System.EventArgs e)
{
System.Data.OleDb.OleDbConnection cn =
new System.Data.OleDb.OleDbConnection();
System.Data.OleDb.OleDbCommand cmd;
// 接続文字列を設定してデータベースに接続する
cn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;”
+ “Data Source=C:¥tmp¥DBSample.mdb;”;
cn.Open();
// 追加するテーブルが存在していたら削除しておく
try
{
cmd = new System.Data.OleDb.OleDbCommand(
”DROP TABLE 社員”, cn);
cmd.ExecuteNonQuery();
}
catch{}
try
{
// 社員 テーブルを追加する
cmd = new System.Data.OleDb.OleDbCommand(
”CREATE TABLE 社員(社員番号 INT, 氏名 TEXT(30))”, cn);
cmd.ExecuteNonQuery();
}
catch( Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
// データベースへの接続を切断する
cn.Close();
MessageBox.Show(”[社員]テーブルを追加しました。”, “結果通知”);
}

速効解決!逆引きハンドブックVisual C#
posted with amazlet on 07.01.22
日向 俊二
ソシム
売り上げランキング: 9460
おすすめ度の平均: 
手許においておくと便利
Amazon.co.jp で詳細を見る
たまにはプログラム的なことも書こうかなと思いまして
リファレンス的なものを作っていこうかなと。
なにかの役に立つかもしれなので(なんの役に立つかはわからないが・・)
環境はVisual C# 2005 Express Editionです。
ということで、Accessのファイルのテーブル一覧取得です。
private void button1_Click(object sender, System.EventArgs e){
System.Data.OleDb.OleDbConnection cn =
new System.Data.OleDb.OleDbConnection();
DataTable dt;
// 接続文字列を設定してデータベースに接続する
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source=C:¥tmp¥DBSample.mdb;";
cn.Open();
// テーブル一覧を取得する
dt = cn.GetOleDbSchemaTable(
System.Data.OleDb.OleDbSchemaGuid.Tables
, new object[] {null, null, null, "TABLE"});
// データベースへの接続を切断する
cn.Close();
// 結果を表示する
foreach(DataRow dtRow in dt.Rows)
System.Diagnostics.Debug.WriteLine(dtRow[2].ToString());
}
結果は出力ウィンドウに表示されます。
ハーバート シルト Herbert Schildt スリーエーシステムズ 矢嶋 聡
翔泳社
売り上げランキング: 43705
すこし、遅いですが、あけましておめでとうございます。
今年もよろしくお願いします。
去年はなんとか資格も取得でき、少しはスキルも向上したのかなと思います。
今年はさらに上位資格を取得しようと考えてるとこです
今年はコードコンプリートを読破しようと思うのですが、
もし、おすすめ本とかプログラマなら読んでおいてほうがいいという本があれば
あと笑えるおもしろい本
コメントに書いてもらえると、ありがたいです。
でわでわ
森田佳佑
パンローリング
売り上げランキング: 5832
おすすめ度の平均:

エクセルマクロとVBAの入門書
初心者向け自動売買登竜門
井上 義教
同友館
売り上げランキング: 42369
おすすめ度の平均:

重要なエッセンスがコンパクトにまとめられています
勘ピュ-ター投資家