スタックとヒープについてザックリ表現すると、スタックで書かれたプログラムはメモリー上に保持され、ヒープで書かれたプログラムはハードディスクに保持される。という違いがあります。
ハードディスクに比べて、メモリーの処理速度は十倍から百倍くらい速いので、ヒープで書かれたプログラムより、スタックで書かれたプログラムは、十倍から百倍くらい速いと言えます。
VCや、VC++で開発していた10年位前は、可能な限りスタックで処理することを、シビアに求められていましたが、.Net Framework が主流になってからは、あまり聞かなくなりました。
しかし、スタックとヒープの概念は、最新版の .Net Framework にも存在しているので、スタックの力を上手く引き出せば、高速なアプリケーションを開発する事ができます。
スタックを使っているかどうかで、「あの人の作るプログラムは速い!」と言われるか、「あいつのプログラムは遅い!」と言われる違いを生みますので、プロフェッショナル・プログラマーを目指す方には、必須の知識だと言えます。
スタックプログラムをC#で記述する場合、定数と共通処理が対象となり、static class(静的クラス)で表現します。
何度も呼ばれる処理を、静的クラスで定義する事で、プログラムのパフォーマンスを改善するのは、プロフェッショナル・プログラマーの定石だと言えます。
C#で例を示しますが、VB.NETでも同様です。
1.静的クラスで記述した定数の、具体的なソースを以下に示します。
【定義例】
1 2 3 4 5 6 7 |
public static class C_画面最小サイズ { public const int メイン_縦 = 768; public const int メイン_幅 = 1024; } |
【使用例】
1 2 3 |
int a = C_画面最小サイズ.メイン_縦; |
2.静的クラスで記述した共通処理の、具体的なソースを以下に示します。
【定義例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public static class C02業務共通処理 { private static string CSV規定書式変換(string field) { string ret = field; if ((field.IndexOf('"') > -1) || (field.IndexOf(',') > -1) || (field.IndexOf('\r') > -1) || (field.IndexOf('\n') > -1) || (field.StartsWith(" ")) || (field.StartsWith("\t")) || (field.EndsWith(" ")) || (field.EndsWith("\t"))) { if (field.IndexOf('"') > -1) { //"を""とする ret = field.Replace("\"", "\"\""); } ret = "\"" + field + "\""; } return ret; } } |
【使用例】
1 2 3 |
string value = CSV規定書式変換(grid.Columns[iCol].HeaderText); |
スタックが静的クラスなのに対して、ヒープは動的クラスで記述します。
動的クラスは、new メソッドでインスタンスを生成しないと、使用できないのが特徴です。
フォームのように、static が宣言されていない class は全て動的クラスです。
動的クラスで記述されたフォームの具体的なソースを以下に示します。
【使用例】
1 2 3 4 5 |
_502スタッフ詳細 _502スタッフ詳細 = null; _502スタッフ詳細 = new _502スタッフ詳細(); _502スタッフ詳細.ShowDialog(); |
コメント