オブジェクトをNothingに設定する必要はありますか?
2023-10-22 09:19:49
質問
私はいつも、オブジェクトを使い終わったら何もない状態にすることが推奨されると読んでいます。しかし、私は通常、フォーム内の関数のみでそれらを使用します。
オブジェクトをNothingに設定しても、関数スコープを離れると参照は失われ、メモリは解放されないのでしょうか?
すなわち、本当にそうする必要があるのでしょうか。
Set db = Nothing
Set record_set = Nothing
どのように解決するのですか?
VB では、いわゆる "参照カウント" ガベージコレクタを使用しています。
基本的には、変数がスコープ外に出た瞬間に、参照されているオブジェクトの参照カウンタがデクリメントされます。オブジェクトの参照を別の変数に代入すると、参照カウンタがインクリメントされます。
カウンタがゼロになると、そのオブジェクトはガベージコレクションの準備が完了します。オブジェクトのリソースは、これが起こるとすぐに解放されます。関数のローカル変数は、ほとんどの場合、参照カウントが1より高くなることのないオブジェクトを参照しますので、関数の終了時にオブジェクトのリソースは解放されます。
変数を
Nothing
に設定することは、明示的に参照カウンターを減少させる方法です。
例えば、あるファイルを読み込んで、ファイルオブジェクト変数を
Nothing
の直後に
ReadAll()
の呼び出しの直後です。ファイルハンドルはすぐに解放されますので、その内容をじっくりと処理することができます。
に設定しない場合は
Nothing
に設定しない場合、ファイルハンドルは必要以上に長く開かれる可能性があります。
貴重なリソースのブロックを解除しなければならないような状況でなければ、単に変数をスコープの外に出してもかまいません。
関連
-
vlookup関数の使用でExcelのvba
-
ADODBを使用したExcel VBAで、小計を使用してデータベースにアクセスする
-
[解決済み] Excel VBA Projectのパスワードを解読する方法はありますか?
-
名前の秘密:Excelの隠された名前空間
-
[解決済み] Excel VBAで整数を文字列に変換するにはどうすればよいですか?
-
[解決済み] VBAでSetというキーワードは実際に何をするのですか?[重複しています]
-
[解決済み] Microsoft Office VBAの編集時に、ポップアップの「コンパイルエラー」メッセージを無効にするにはどうすればよいですか?
-
[解決済み] VBAでコンストラクタに引数を渡す
-
[解決済み] 文字列が文字列で始まるかどうかをテストしますか?
-
[解決済み] VBAのエラー処理に適したパターンにはどのようなものがありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] VBAを使用してtxtファイルを作成し、書き込む方法
-
名前の秘密:Excelの隠された名前空間
-
[解決済み] VBAでSetというキーワードは実際に何をするのですか?[重複しています]
-
[解決済み] Microsoft Office VBAの編集時に、ポップアップの「コンパイルエラー」メッセージを無効にするにはどうすればよいですか?
-
[解決済み] VBA - 条件付きで for ループの反復をスキップする方法
-
[解決済み] VBAのハッシュテーブル/連想配列
-
[解決済み] VBAでコンストラクタに引数を渡す
-
[解決済み] 文字列が文字列で始まるかどうかをテストしますか?
-
[解決済み] エラー 3340 クエリ実行時にクエリ ' ' が破損している DoCmd.RunSQL
-
[解決済み] VBAのエラー処理に適したパターンにはどのようなものがありますか?