C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[18]: AppDomainのアンロードタイミング [1]


(過去ログ 108 を表示中)

[トピック内 24 記事 (21 - 24 表示)]  << 0 | 1 >>

■64183 / inTopicNo.21)  Re[15]: AppDomainのアンロードタイミング
  
□投稿者/ SS (3回)-(2012/11/12(Mon) 09:55:28)
Azulean さん

> なので、元の AppDomain での SynchronizationContext.Current をメンバー変数で覚えておき〜
やってみました。
とりあえずエラーも出ず、やりたかった事が実現できているように見えます。

ありがとうございます。
これまで対応してくださった皆様も、ありがとうございました。

後は…、私が SynchronizationContext を理解できていない事が気がかりですが…。
と言うのも、最初に Azulean さんが仰られていた
 「それが安全かどうかまではわかりません、すみません。」
の事があるからです。 やはりベストなのは
 "AppDomainがアンロード可能な状態になった事"を感知出来る事
なんだと思います。
その機能が 元々 Framework に用意されていない?という事は、「出来ない」,「やっていはいけない」
と言うことなんでしょうかねぇ…。
引用返信 編集キー/
■64188 / inTopicNo.22)  Re[16]: AppDomainのアンロードタイミング
□投稿者/ Azulean (65回)-(2012/11/12(Mon) 22:24:43)
No64183 (SS さん) に返信
> と言うのも、最初に Azulean さんが仰られていた
>  「それが安全かどうかまではわかりません、すみません。」
> の事があるからです。

後述しますが、安全かどうかは作る人が保障しなければならない、実際のコードとつきあわせてタイミングを保障しなければならないので、安全かどうかは第三者にはわかりません。


> やはりベストなのは
>  "AppDomainがアンロード可能な状態になった事"を感知出来る事
> なんだと思います。
> その機能が 元々 Framework に用意されていない?という事は、「出来ない」,「やっていはいけない」
> と言うことなんでしょうかねぇ…。

環境やクラスライブラリとしては、そのタイミングを規定しづらいので「用意しない」というスタンスなのではないかと思います。
作っている人からすれば自明なのかもしれませんが、残っているオブジェクトがいつ使われるのか、イベントがいつ起きるのかは、実行環境としては把握しづらいと思います。動いているコードがなくなったとしても再利用されないとも限らないわけですから、アンロードできるタイミングというのは一律に置けないと思います。
従って、確実にコードが終わったと思われる安全なタイミングをプログラマーが規定し、そのタイミングで AppDomain を Unload するしかないと思います。
たとえば、Synchronaization.Context.Post で次のメッセージループのタイミングでコードを呼び出させておいて、そこからタイマーで 10 秒後にアンロードすれば安心とか、自分でタイミングを図る必要があるかと。
引用返信 編集キー/
■64192 / inTopicNo.23)  Re[17]: AppDomainのアンロードタイミング
□投稿者/ SS (4回)-(2012/11/13(Tue) 09:52:50)
No64188 (Azulean さん) に返信
>
> 後述しますが、安全かどうかは作る人が保障しなければならない、実際のコードとつきあわせてタイミングを保障しなければならないので、安全かどうかは第三者にはわかりません。

> 環境やクラスライブラリとしては、そのタイミングを規定しづらいので「用意しない」というスタンスなのではないかと思います。
> 作っている人からすれば自明なのかもしれませんが、残っているオブジェクトがいつ使われるのか、イベントがいつ起きるのかは、実行環境としては把握しづらいと思います。動いているコードがなくなったとしても再利用されないとも限らないわけですから、アンロードできるタイミングというのは一律に置けないと思います。
> 従って、確実にコードが終わったと思われる安全なタイミングをプログラマーが規定し、そのタイミングで AppDomain を Unload するしかないと思います。
> たとえば、Synchronaization.Context.Post で次のメッセージループのタイミングでコードを呼び出させておいて、そこからタイマーで 10 秒後にアンロードすれば安心とか、自分でタイミングを図る必要があるかと。

返信ありがとうございます。 ここまでお付き合い下さって…(嬉

いやぁ、ただただ納得するばかりです!
Synchronaization.Context.Post の事は未だ勉強できてはいませんが、
プログラム作成者側が Unload のタイミングを決める。 と言うのは素直に納得できました。

うーん…、今回のようなモードレスフォームを呼び出す事でメソッドの終了が検知しにくい
ような処理を AppDomain で行う事自体が、そもそも…なのかもしれませんね。
ちなみに…、

誠に言いにくいのですが…、
この件について調べ、ここでお聞きしているこの数日の間に、
今回は動的にDLLを呼ぶ事は行わない(Exeのプロジェクトに参照設定する)方向で
開発を進める事に決定してしまいました!

…なんかスイマセン。

しかし、大変勉強になりました! いつか役立てたいと思いますっ。
皆さんありがとうございました。
解決済み
引用返信 編集キー/
■64194 / inTopicNo.24)  Re[18]: AppDomainのアンロードタイミング
□投稿者/ howling (70回)-(2012/11/13(Tue) 10:30:58)
SSさん

>うーん…、今回のようなモードレスフォームを呼び出す事でメソッドの終了が検知しにくい
ような処理を AppDomain で行う事自体が、そもそも…なのかもしれませんね。

これなんですが、ちょうど業務で逆のことをしてます。
FormをC#で作って、ウィンドウを作成し、
そのウィンドウハンドルをC++に渡してあげて、
C++でこのウィンドウハンドルを用いて描画、という感じです。

逆は面倒かなーということで、当初その方針になってしまって、
あー…逆でやってたらこうなっていたのかーと、
こちらとしても勉強になりました。

ありがとうございました。
解決済み
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -