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