C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ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)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
No.82062 の関連記事表示
ヒット / 10件
(1-10 を表示)
<<
0
>>
■82062
メモリリークについて
□投稿者/ JYK -
(2016/12/04(Sun) 17:44:32)
分類:[.NET 全般]
2016/12/04(Sun) 18:27:23 編集(投稿者)
Visual Basic 2010 のAddHandler と RemoveHandlerとメモリリークについてい
質問させていただきます。
(1)現在、AddHandlerをFormのロードじにイベント登録していまいます。
そしてFormのアンロード時にRemoveHandlerのイベントの解除をしています。
AddHandler に関しては、必要な時に登録して不必要になったらRemoveHandlerでイベント削除をした方がメモリリークが起こりにくいのでしょうか?
そんなことが書いているサイトもあるので皆様方は、どのようにお考えでしょうか?
(2)AddHandlerを何度も通るとメモリリークになりますか?
(3) Visual Basic 2010とVisual Basic 6のメモリ解放について違いは、どのように違うのでしょうか?
そのあたりのことがわかればと思います。
親記事 /過去ログ140より /
関連記事表示
削除チェック/
■82063
Re[1]: メモリリークについて
□投稿者/ shu -
(2016/12/05(Mon) 09:03:30)
■
No82062
(JYK さん) に返信
> 2016/12/04(Sun) 18:27:23 編集(投稿者)
>
> Visual Basic 2010 のAddHandler と RemoveHandlerとメモリリークについてい
> 質問させていただきます。
>
> (1)現在、AddHandlerをFormのロードじにイベント登録していまいます。
> そしてFormのアンロード時にRemoveHandlerのイベントの解除をしています。
>
> AddHandler に関しては、必要な時に登録して不必要になったらRemoveHandlerでイベント削除をした方がメモリリークが起こりにくいのでしょうか?
> そんなことが書いているサイトもあるので皆様方は、どのようにお考えでしょうか?
今時のメモリが十分ある状況であれば気にするほどではないかと思います。
どのようにFormの表示を行うかによりますがHide,Showの繰り返しが発生する場合、Loadイベントはそのたび
発生するので気を付けた方がよいです。
> (2)AddHandlerを何度も通るとメモリリークになりますか?
メモリリークというよりイベント処理が多重に発生するので思はぬ動作をするかもしれません。
Removeしていれば大丈夫ですが。
>
> (3) Visual Basic 2010とVisual Basic 6のメモリ解放について違いは、どのように違うのでしょうか?
> そのあたりのことがわかればと思います。
GC(あるいみ自動解放)によるか、手動解放かの違いではないでしょうか。
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
■82065
Re[1]: メモリリークについて
□投稿者/ WebSurfer -
(2016/12/05(Mon) 10:33:40)
■
No82062
(JYK さん) に返信
> AddHandler に関しては、必要な時に登録して不必要になったらRemoveHandlerで
> イベント削除をした方がメモリリークが起こりにくいのでしょうか?
静的イベントについてはその通りのようです。
例えば、Application クラスの全イベントが静的イベントです。MSDN ライブラリには、
"これは静的イベントなので、アプリケーションが破棄されるときにイベント ハンドラ
をデタッチしないと、メモリ リークが発生します"
・・・という解説があります。
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
■82067
Re[2]: メモリリークについて
□投稿者/ Jitta -
(2016/12/05(Mon) 13:45:13)
ShowとHideの繰り返しでは、Loadは発生しないと思いますが、違ったっけ?
メモリリークをどういう状態ととるか。
静的だろうが動的だろうが、参照が残っていたら解放されない。
どういう時に解放されていないかをリークしているとするかで、リークしているしていないは変わります。
動的イベントであっても、その動的イベントを定義するインスタンスが解放されない限り解放されない。
アンロードイベントって何?FormClosed?
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
■82068
Re[3]: メモリリークについて
□投稿者/ shu -
(2016/12/05(Mon) 13:53:09)
■
No82067
(Jitta さん) に返信
> ShowとHideの繰り返しでは、Loadは発生しないと思いますが、違ったっけ?
失礼しました。
ShowDialogしてDisposeせずに再度ShowDialogでした。
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
■82070
Re[4]: メモリリークについて
□投稿者/ JYK -
(2016/12/05(Mon) 23:37:40)
■
No82068
(shu さん) に返信
> ■
No82067
(Jitta さん) に返信
>>ShowとHideの繰り返しでは、Loadは発生しないと思いますが、違ったっけ?
> 失礼しました。
> ShowDialogしてDisposeせずに再度ShowDialogでした。
色々、ありがとうございます。ご参考になります。
AddHandlerの前にRemoveHandlerを実行させるのは、イベントの数を1回にするこで可能でしょうか?
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
■82219
Re[5]: メモリリークについて
□投稿者/ JYK -
(2016/12/18(Sun) 10:04:39)
■
No82070
(JYK さん) に返信
> ■
No82068
(shu さん) に返信
>>■
No82067
(Jitta さん) に返信
> >>ShowとHideの繰り返しでは、Loadは発生しないと思いますが、違ったっけ?
>>失礼しました。
>>ShowDialogしてDisposeせずに再度ShowDialogでした。
>
> 色々、ありがとうございます。ご参考になります。
>
>
> AddHandlerの前にRemoveHandlerを実行させるのは、イベントの数を1回にするこで可能でしょうか?
>
あと一つ聞きたいことがります。
http://tasano2525.blogspot.jp/2014/07/c.html
上記のアドレスに購読していないイベントは、メモリリークになりますと書いていますが
Private Sub OnDataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
にいくつかRaiseEventがあります。
これを発生させるには、AddHandlerが実行されていないとRaiseEventが動作しないのですが
RaiseEventが発生しない(動作しない)場合、メモリリークになる可能性もございますか?
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
■82220
Re[6]: メモリリークについて
□投稿者/ Azulean -
(2016/12/18(Sun) 10:46:48)
2016/12/18(Sun) 10:51:03 編集(投稿者)
.NET のメモリ管理、ガベージコレクション(GC)、オブジェクトの生存期間といった要素を一通り学んでもらった方がいいと思います。
法則性を理解していないと、個別ケースごとに質問しないと先に進まなくなるので。
・静的なイベントに AddHandler した後、RemoveHandler せずに放置すると、そのイベントハンドラを割り当てたオブジェクトの参照が残るので、オブジェクトが不要になっていたとしても回収されることがない。
→イベントを発行する側の生存期間が長く、イベントを受け取る側の生存期間が短い場合は RemoveHandler が必要。
・同じ生存期間のコンポーネント、コントロール相手に AddHandler したものは、RemoveHandler せずともかまわない。(Form の InitializeComponent がその一例)
個別ケースについて答えていっても終わりが見えないので、法則性、リークすると言われているバックグラウンドを理解するように努力しましょう。
-----
メモリリークを気にするのに、.NET のメモリ管理・GC を勉強しないのは足りていないと考えています。
メモリリークの要因はイベントハンドラだけではないからです。
「.NET メモリ管理」をキーワードにいろいろと調べてみてください。
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
■82221
Re[6]: メモリリークについて
□投稿者/ WebSurfer -
(2016/12/18(Sun) 10:51:33)
■
No82219
(JYK さん) に返信
>
http://tasano2525.blogspot.jp/2014/07/c.html
> 上記のアドレスに購読していないイベントは、メモリリークになりますと書いていますが
それは以下の記事の「登録解除が必要」のセクションに書いてあることと同じこと
を言っているのではないかと思います。
【雑記】イベントの購読とその解除
http://ufcpp.net/study/csharp/MiscEventSubscribe.html
抜粋すると:
"・・・前略・・・
発生側から受取側にイベントを伝える都合上、必ず、発生側が受取側の参照を持ち
ます。 発生側の寿命が長くて、受取側の寿命が短い場合、イベント購読解除しない
とメモリ リークが起きます。
・・・中略・・・
寿命に差があるときにだけ管理すればいい
・・・後略・・・"
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
■82236
Re[6]: メモリリークについて
□投稿者/ Jitta -
(2016/12/20(Tue) 21:46:25)
■
No82219
(JYK さん) に返信
> これを発生させるには、AddHandlerが実行されていないとRaiseEventが動作しないのですが
> RaiseEventが発生しない(動作しない)場合、メモリリークになる可能性もございますか?
何をもって「リークしている」としますか。
例えば、System.Windows.Forms.Application.ApplicationExit に、コンストラクタ…おっと、VB.NET では Load イベントの方が一般的?で、何かのクラスのインスタンス メソッドを結びつけます。このインスタンスは、コンストラクタなり Load イベントハンドラの中でインスタンス化したとします。変数の参照可能範囲は、コンストラクタ/イベントハンドラの中のみとします。コンストラクタや Load イベントを抜けたとき、メモリリークは発生しているでしょうか。
答え。開発者の意図による。
開発者が、「コンストラクタ(Load イベントハンドラ)を実行中にアプリケーションが終了した場合のみ、行いたい処理」としてイベントハンドラを登録したなら、メモリリークです。
しかし、「アプリケーションが終了した場合に行いたい処理」として登録したらなら、メモリリークではありません。
とはいえ、後からメンテナンス目的で見た場合、どちらか判別がつきにくいので、一般的には避けるべき書き方です。
.NET Framework では、開発者は積極的にメモリ管理をする必要はありません。質問の意図は、なんでしょうか。
記事No.82062 のレス /過去ログ140より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-