プログラム コード サイズを最適化するための多くの手法のほとんどには、コードから不要な要素を削除することが含まれます。 Visual Basic は、アプリケーションのコンパイル時に特定の要素を自動的に削除します。アプリケーションが .EXE ファイルとして実行される場合、識別子名、コメント、および空白行の長さや数に制限はありません。これらの要素は、アプリケーションが占有するメモリ サイズに影響を与えません。変数、フォーム、プロシージャなどの他の要素は、メモリ内である程度のスペースを占有します。より効率的にするために、それらを合理化することをお勧めします。アプリケーションが必要とするメモリを削減し、コードサイズを削減するための 6 つの方法を紹介します。初心者の参考になれば幸いです。
1. ロードするフォームとコントロールの数を減らし、テキスト ボックスの代わりにラベルを使用します。
読み込まれた各フォームは、表示されるかどうかに関係なく、一定量のメモリを占有します (量は、フォーム上のコントロールの種類と数、フォーム上のビットマップのサイズなどによって異なります)。フォームを表示する必要がある場合にのみフォームをロードし、不要になった場合は (フォームを非表示にするのではなく) フォームをアンロードします。フォームのプロパティ、メソッド、コントロール、または New で宣言されたフォーム変数への参照により、Visual Basic によってフォームが読み込まれることに注意してください。
Unload メソッドを使用してフォームをアンロードする場合、フォームが占有している領域の一部のみを解放できます。すべてのスペースを解放するには、Nothing キーワードを使用してフォームの参照を無効にします。
アプリケーションを設計するときは、フォームで使用するコントロールをできる限り少なくする必要があります。実際の制限はコントロールの種類とシステムによって異なりますが、実際には、多数のコントロールを含むフォームの実行は遅くなります。関連するテクニックとしては、デザイン時にフォーム上に同じタイプのコントロールを多数配置するのではなく、可能な限りコントロールの配列を使用するという方法があります。コントロール配列は、共通の名前とタイプを持つコントロールのグループです。彼らの成り行きも同じだ。デザイン時に、コントロール配列を使用してコントロールを追加すると、同じ種類の複数のコントロールをフォームに直接追加するよりも、消費するリソースが少なくなります。コントロール配列は、複数のコントロールでコードを共有する場合にも役立ちます。ラベル コントロール Label は、テキスト ボックス Textbox よりも使用する Windows リソースが少ないため、可能な場合はテキスト ボックスの代わりにラベルを使用する必要があります。たとえば、フォーム上の非表示コントロールにテキストを保持する必要がある場合、ラベルを使用するとより効果的です。
2. ディスク ファイルまたはリソースと組織モジュールを使用する
設計時にアプリケーションに直接配置されたデータ (プロパティまたはコード内のリテラル文字列や値など) は、実行時にアプリケーションが占有するメモリを増加させます。実行時にディスク ファイルまたはリソースからデータをロードすると、メモリ使用量が削減されます。これは、大きなビットマップや文字列の場合に特に役立ちます。リソース ファイルは実際には一連の独立した文字列、ビットマップ、またはその他のアイテムで構成されており、それぞれに一意の識別子があります。リソース ファイルは、Microsoft Visual C で提供されるものと同様のテキスト エディタおよびリソース コンパイラを使用して作成できます。コンパイルされたリソース ファイルには .res 拡張子が付きます。
Visual Basic は、必要な場合にのみモジュールを読み込みます。つまり、コードがモジュール内のプロシージャを呼び出すと、モジュールはメモリに読み込まれます。特定のモジュールのプロシージャが呼び出されない場合、Visual Basic はモジュールをロードしません。したがって、関連するプロシージャを同じモジュールに配置し、必要な場合にのみ Visual Basic がモジュールを読み込むようにしてください。
3. Variant データ型の置き換えを検討する
バリアント データ型は非常に柔軟に使用できますが、他のデータ型よりも多くのメモリを消費します。アプリケーション内の余分なスペースを圧縮したい場合は、バリアント変数を他のデータ型に置き換えること、特にバリアント変数配列を置き換えることを検討する必要があります。
各 Variant は 16 バイトを占有し、Integer は 2 バイト、Double は 8 バイトを占有します。可変長の文字列変数は、文字列内の 1 文字につき 4 バイトに加えて 1 バイトを消費します。ただし、文字列を含む各バリアントは、文字列内の 1 バイトにつき 16 バイトに加えて 1 バイトを消費します。バリアント変数は非常に大きいため、ローカル変数またはプロシージャの引数として使用すると、スタック領域をすぐに消費するため、特に迷惑になります。ただし、場合によっては、バリアントの代わりに他のデータ型を使用すると柔軟性が低下し、失われた柔軟性を補うためにコードを追加する必要があります。その結果、実際のサイズの縮小にはなりません。
4. 削除時に動的配列を使用してメモリを再利用する
固定配列の代わりに動的配列を使用します。動的配列のデータが不要になった場合は、Erase または ReDimPReserve を使用して不要なデータを破棄し、配列で使用されていたメモリを再利用します。たとえば、動的配列によって使用されているスペースを再利用するには、次のコードを使用します。
ここで、Erase は配列を完全に削除しますが、ReDimPreserve は内容を失わずに配列を短縮するだけです。
固定サイズの配列を削除しても、配列が占めていたスペースは再利用されません。単に配列の各要素から値がクリアされるだけです。要素が文字列、または文字列または配列を含むバリアントである場合、配列を削除すると、配列自体が占有しているメモリではなく、それらの文字列またはバリアントが占有しているメモリが再利用されます。
5. 文字列変数またはオブジェクト変数によって使用されているスペースを再利用する
プロセスが終了すると、(非静的) ローカル文字列および配列変数によって使用されていたスペースは自動的に回収されます。ただし、グローバルおよびモジュールレベルの文字列変数と配列変数は、プログラム全体が終了するまで存続します。アプリケーションをできるだけ小さくしたい場合は、これらの変数によって使用されるスペースをできるだけ多く再利用する必要があります。長さゼロの文字列を文字列変数に代入すると、そのスペースが再利用されます。
同様に、オブジェクト変数を Nothing に設定すると、オブジェクトによって使用されているスペースの一部 (すべてではありません) が再利用されます。たとえば、Form オブジェクト変数を削除するには、次のようにします。
明示的なフォーム変数を使用していない場合でも、使用されなくなったフォームを単に非表示にするのではなく、注意してアンロードする必要があります。
6. デッドコードと無駄な変数を削除する
アプリケーションを開発および変更すると、デッド コード (コード内のどこにも呼び出されないプロセス全体) が残る場合があります。未使用の変数が宣言されている場合もあります。確かに、Visual Basic は .exe ファイルの作成時に不要な定数を削除できますが、不要な変数や無効なコードは削除できません。コードを注意深く確認して、無駄な変数や無効なコードを見つけて削除してください。たとえば、Debug.Print ステートメントは .exe の実行時には無視されますが、.exe ファイルには頻繁に表示されます。
.exe ファイルを作成する場合、文字列と変数をパラメータとして含む Debug.Print ステートメントはコンパイルされません。ただし、パラメーターとして関数を含む Debug.Print ステートメントの場合、それ自体はコンパイラーによって無視され、関数はコンパイルされます。したがって、アプリケーションの実行中に関数は呼び出されますが、戻り値は無視されます。 .exe ファイル内で関数が Debug.Print のパラメータとして現れると、領域と CPU サイクル タイムが占有されるため、exe ファイルを生成する前にこれらのステートメントを削除することをお勧めします。
[編集] メニューの [検索] コマンドを使用して、特定の変数への参照を検索します。また、各モジュールに OptionExplicit ステートメントが含まれている場合、変数の宣言を削除またはコメントしてアプリケーションを実行することで、その変数が使用されているかどうかをすぐに確認できます。この変数を使用すると、Visual Basic でエラーが発生します。エラーが発生しない場合、変数は使用されません。 ->