
毎々参考にさせていただいております。
早速ですが質問させていただきます。
あるフォームでボタンが押された時に、下記の3つの処理でログを出力したい場合なのですが。
a) ボタンが押されたイベント処理
b) ボタンが押されたイベント処理の中で呼ばれるTestFunction1の中
c) ボタンが押されたイベント処理の中で呼ばれるTestFunction2の中
複数のメソッドに参照されるということで、StreamWriterのオブジェクトはインスタンスフィールドに宣言しています。
Public Class Test
'StreamWriter型のフィールド宣言
Private _sw As System.IO.StreamWriter
'ボタンクリックイベント処理
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me._sw = New System.IO.StreamWriter(filePath)
Using Me._sw
Me._sw.WriteLine("Button1はクリックされました")
Me.TestFunction1()
Me.TestFunction2()
End Using
End Sub
Private Sub TestFunction1()
'TODO:ここに処理
If Me._sw IsNot Nothing Then
Me._sw.WriteLine("TestFunction1は処理されました。")
End If
End Sub
Private Sub TestFunction2()
'TODO:ここに処理
If Me._sw IsNot Nothing Then
Me._sw.WriteLine("TestFunction2は処理されました。")
End If
End Sub
End Class
目的とする処理は実現されているのですが、このようなUsingの使い方は問題ないのでしょうか?
どなたかに御回答いただければうれしく思います。よろしくお願いいたします。
環境は下記のような感じです。
環境IDE:Visual Studio 2005
言語 :Visual Basic
No.1ベストアンサー
- 回答日時:
StreamWriterやGraphicsなども、Application終了後にガベージコレクターに引っ掛かり、最終的には .Net がメモリを解放するはずなのですが、これらはリソースの消費が激しいので、Application内で何回も作成されることを防ぐために、まめに Usingブロックか、Disposeメソッドでメモリを掃除しろ、というのがMSの推奨です。
_swは、使い切ってから End Using に達するので、問題ないように思えます。ただ蛇足ですが、_swがNothingでないかどうかだけで、所定の機能が果たせた、という判断は若干疑問です(大きなお世話ですね)。
この回答への補足
ddtddtddtさん、早速の御回答ありがとうございます。
Usingの使い方として、
Private Sub TestFunction3()
Using sw As System.IO.StreamWriter = New System.IO.StreamWriter(filePath)
sw.WriteLine("テスト")
End Using
End Sub
というように、ローカルで宣言してその場で使い、メソッドをまたぐ様な使い方をしたことがなかったため、
質問内容のような書き方がありなのか??と思った次第です。
一応、質問内容のような場合とローカルのみで使う場合の両方のケースで、Usingブロックを抜けたあとの
StreamWriterオブジェクトの様子をウォッチで確認したところ、両方のケースで同じように動いていました。
(と思われます)
>ただ蛇足ですが、_swがNothingでないかどうかだけで、所定の機能が果たせた、という判断は若干疑問です。
これについてですが、いつもこのように処理してしまっているのですが・・・。私の勉強不足です。
勉強になりました。御回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
InvalidateRectがうまくいかない
-
ASP VBScriptでスクリプト実行...
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
.NetのBackgroundWorkerクラス...
-
家電製品の電力周波数を変える機械
-
if ( a & b == b )
-
アプリケーションが終了するま...
-
C言語プログラミングで、多項式...
-
C#で通信処理。応答がない場合...
-
実行時のコマンドプロンプトを...
-
マルチスレッドのスレッド数を...
-
PIC mainループについて
-
VBA:CSVファイルの読出し手法...
-
bmp → jpeg への変換
-
.sb3のファイルを.sb2に変換す...
-
常駐するアプリケーションを初...
-
スレッドがサスペンドされてい...
-
スレッドの終了を知りたい(Wind...
-
マンセル⇔XYZ,RGB変換式或いは...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
PostMessageの連続送信
-
エクセルVBAでクリップボード内...
-
VBA、UserFormを前面に出力して...
-
ファンクションキーのキャンセ...
-
Application.ScreenUpdating=Fa...
-
【MFC】イベントの無効化について
-
VBA kernel32 の意味
-
マウスのクリックを無視したい
-
ループを使わずに、特定時間に...
-
Excel VBA 自動的に閉じるMsgBox
-
「キャンセル」ボタン付きの処...
-
シャットダウン時のExcel強制終...
-
OSシャットダウン時の常駐アプ...
-
VB.NETで数秒間msgboxの...
-
VB6 コマンドボタン クリック...
-
Excel VBA 実行中に一瞬フリー...
おすすめ情報