- - PR -
画面Load時のClose処理について。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-12 12:49
objectです。
>諸農さん はい、お久しぶりですね。 署名に 「Powered by Turbo Delphi」 とありますが、「Turbo」はどうなさるんですか? 私は少し様子を見ています。(^^ゞ それで、 ご指摘の件ですが、 「Delphi」と混同している訳ではありません。 かなり以前ですが、 一度流れを追ってみました。 そして、私がレスの中で >「Formのコンストラクション処理中」と考えるべきだと思います。 の様に 「考えるべきだ」とし「である」 と断定し無かったのは、正確には、 「コンストラクション処理中」 では無いからです。 #でも、私は、「その方が合理的に考えられる」と思っていますし、 #大局的な意味で、この様に考える事にしています。 #しかし、もっと補足をした方が良かったかも知れません。 参考迄に、Loadイベントの流れを逆に辿ると 「Loadイベント」はFormの「OnLoad()」で呼ばれ、 「OnLoad()」はFormの「OnCreateControl()」で呼ばれます。 そして、 「OnCreateControl()」はControlの「CreateControl(bool)」で呼ばれ、 「CreateControl(bool)」は「SetVisibleCore(bool)」で呼ばれている と思います。 #これ以上は追っていません。 #簡単に再度確認しましたが、間違っている可能性はあります。 それで、 「SetVisibleCore(bool)」----(1) のタイミングですが、 コンストラクト直後で「Visible」にする直前でしょうか? #でも、今は余り気にしない事にしています。 >FormのLoadイベントはコンストラクタ処理が終了して、フォームが初めて表示される直前に呼び出されるのでは? 参照で示された情報では 「フォームが初めて表示される直前に発生します。」 とありますが、これは「2.0」からの表現ではないでしょうか? それから、「コンストラクタ処理が終了して」と明示的には書いては無いですよね? しかし、これはかなりいい加減な表現だと思います。 イベントは文字通り 「重要な事象」 の筈ですからね。 #私は、コンストラクト時点は「重要なイベント」だと考えています。 #だから、「これが無い筈は無い」とも思っています。 #実際的に、「Create」イベントが無いという事は、「MS」自体が #「Create」≒「Load」 #と考えている? #「Create」最後で、「Load」と同じ処理が出来るかどうかは、実装上の問題だと思います。 >デザイナで設定されている情報はコンストラクタから呼ばれるInitializeComponent()メソッド内で完了 >していますし。… サンプルのコードで動きを説明しておられる部分に付いては、その通りだと思います。 #しかし、コンストラクタを抜けた後の、不明確な(1)のタイミングで、そのイベント名を #「Load」とする事の意味は「VBユーザー」への配慮以外には意味が無いと思います。 恐らく「VB」が無ければ、「Create(d)」等として命名され、 且つ、明確なタイミング(Constructの最後等)で呼ばれてたのではないでしょうか? #「Load」は「Create」に比較したら、取るに足りない事象であり、 #また、これは「抽象化」の精神にも反していると私は思います。 #「Load」はこのイベント動作の具体的な目的そのもの「画面Load」を意味すると思いますから。 >ドキュメントにLoadイベント内でCloseは呼ばないでって書かれている意図は、 >ユーザカスタマイズで必要なリソース割り当ての最中に、割り当て対象が破棄されるとメモリリークが起きますよ >って事ではないでしょうか。 これは、「Load」だけで無く、 「初期化に相当する処理」では、いつも起き得る内容ですよね。 尚且つ、 「コンストラクション処理」はオブジェクト指向プログラミングによって初めて現れた「重要な概念・処理」ですから、 注意を喚起する意味でも、「Createイベント」にした方が良かったと思います。 最後ですが、 「いえ蔵さん」がこのスレの様に考えた原因は、 「MSとVBに責任がある」 と私は思っています。 #恐らく、VBの進化(?)と共に、益々混乱して行くのでしょうね? #ここ迄来ると、VBは、正に「プロクルステスの寝台」だと思います。 | ||||||||
|
投稿日時: 2006-09-12 22:56
VS2005 環境で、こんなところを参照。
ms-help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_fxmancli/html/e81db09b-4453-437f-b78a-62d7cd5c9829.htm | ||||||||
|
投稿日時: 2006-09-13 17:30
お世話になっております。
返信が遅くなって申し訳ありません。 Form Load から、Closed 迄の間、データベースを開いたままにしている件ですが、 以下の2種類を検証しました。 1. データベースをOpenしたまま、1000回 SQLを発行。 2. データベースをOpenし、SQLを発行、データベースをCloseする。 この処理を1000回繰り返す。 検証した結果、皆様から返信があった通り、接続をプールしている為、項番1. 2. の 処理時間は殆ど変わりがありませんでした。 大変、勉強になりました。 皆様、本当にありがとうございました。 | ||||||||
|
投稿日時: 2006-09-14 22:43
いえ。VS2002 の MSDN にも、『フォームが初めて表示される直前に発生します。』と、書かれています。 「初期化処理」という、デフォルトで記入されるコメントが、混乱の原因ではないでしょうか。 コンストラクタの最後と、Load イベント ハンドラの最初でメッセージを出力すると、Load イベントはコンストラクタが終わってから発生することがわかります。 また、同じようにして調べると、Load イベントが発生するのは、コンストラクタが終わった後というより、Show または ShowModal メソッドが呼ばれた後であることがわかります。 このことから、ディスプレイにロードされるときに発生するイベントであると、理解できます。 ディスプレイにロードする直前、ユーザが目にする直前に発生するイベントなので、その中で業務処理を始められるように設定する、すなわち初期処理を行うのは、理解できることではないでしょうか。 Win. はわからないでもないけど、ASP.NET の「アプリケーションを初期化する処理をここに記述します」は、“バグ”と言ってもいいと思っています。 こうすると、「“初めて”表示される」というのが、またわからなくなってきますかね?でも、Hide は隠れるだけでディスプレイ上に乗っていますから、ロードされるのは1回だけなんですよ。Close すると、Show 出来ませんし。 | ||||||||
|
投稿日時: 2006-09-15 01:20
objectです。
>Jittaさん >いえ。VS2002 の MSDN にも、『フォームが初めて表示される直前に発生します。』と、書かれています。 確認しました。 私も、VS2003を見て書いたつもりでしたが、 今VS2003を確認すると、こちらにも 「フォームが初めて表示される直前に発生します。」 という記述がありました。 これは、私の勘違いでした。 Jubei(諸農)さんにも失礼しました。<(_ _)> >「初期化処理」という、デフォルトで記入されるコメントが、混乱の原因ではないでしょうか。 >…Win. はわからないでもないけど、ASP.NET の「アプリケーションを初期化する処理をここに記述します」は、 >“バグ”と言ってもいいと思っています。… えぇ、同感ですね。 それから、 私は、「MS」に噛み付いてバカリいる様に見えると思いますが、 私が良いと思う所はシッカリ認めてますし、応援もしているんですよ!(^^ゞ 「VB」だけに限った話では無く、 「MS」には、間違ったら、間違ったと認めつつ、どんな時でも 「純粋に少しでも良くする」 という方向で対応して欲しいですね。 | ||||||||
|
投稿日時: 2006-09-15 09:00
知っておりますよ。 .NET CLR 言語の Delphi の 「神託」 を受け継いだ部分は私も好きですから。(Delphi 信者)
最近はこの傾向になっていると思います。 おそらく、レイ・オジー氏の影響かなと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-09-15 21:39
ただ、VB の件になると、MS だけの責任ではないように思います。 もともと、VB は開発者を販売ターゲットとしていません。開発者には VC、開発者以外のプログラミングをする人には VB をターゲットとしていました。 VB の本来のターゲットは、医者、建築家、弁護士、などです。仕事の一部を IT 化することで、効率的に仕事が出来るようになる、そういう人たちです。 難しい話は抜きにして、とにかく簡単にツールが作れ、生産性(この場合、本来の仕事の生産性)が上がればいいよね! こう考えれば、VB の仕様は納得がいきませんか? 開発者が使うようになったことを受け、STRICT オプションを、一旦はデフォルト ON にしています。しかし、これに反対したのは「開発者」です。 # いや、負けないで欲しかった。。。 少なくとも VB.NET 以降のオブジェクト指向的に変な仕様は、開発者に責任があるように思います。 # ユーザの「要望」が取り入れられていますからね!! | ||||||||
|
投稿日時: 2006-09-16 01:15
objectです。
=================== >じゃんぬねっとさん >.NET CLR 言語の Delphi の 「神託」 を受け継いだ部分は私も好きですから。(Delphi 信者) そうだったんですか。(^^)v 昔、ボーランドに提案した事があるんですが、 ボーランドが直接的な利益より、「Delphi」を普及させる事を最大目標にし、 そのユーザー数に於いて、「MS」が実際的に無視出来ない状況を作っていたら、 「ライブラリの仕様はもう少し変わっていた」 と私は考えています。^^; >最近はこの傾向になっていると思います。 >おそらく、レイ・オジー氏の影響かなと思います。 そうなんですか。 「レイ・オジー氏」に関しては、少し私の勉強不足です。(^^ゞ =================== >Jittaさん >ただ、VB の件になると、MS だけの責任ではないように思います。 >もともと、VB は開発者を販売ターゲットとしていません。開発者には VC、開発者以外のプログラミングをする >人には VB をターゲットとしていました。 >VB の本来のターゲットは、医者、建築家、弁護士、などです。仕事の一部を IT 化することで、効率的に仕事 >が出来るようになる、そういう人たちです。 言語としての「Basic」は、最初、 少数の特定概念(文字列、整数、不動少数等)を対象とした 言語だったと思います。 #最初の時点では「CPU・OS・処理系等」の概念とは無関係に単なる概念として処理したと思います。 しかし、VBはその特殊性を忘れ、且つ明確な概念を導入する事無く、 利便性だけを掲げて「汎用性を無制限に拡張」して来ました。 #だから、「VB」自体が悪いと言うより、在り方に問題があるんだと思います。 私は、 他の言語と同じ領域(CPU・OS・処理系等をベースとした)で、同じ様に汎用性を持たせるのであれば、最低限 「Cレベルの概念(名前、アドレス、データ、処理等)」を言語を通して明確化する 必要があると、考えています。 #さらに、言語としての一貫性は、考え方を育てる上で、とても重要なものだと思います。 >難しい話は抜きにして、とにかく簡単にツールが作れ、生産性(この場合、本来の仕事の生産性)が上がれば >いいよね! 私は、時々例としてあげるんですが、 数の性質・各種演算法則等(分配、和・積の逆元に関わる)を抜きにして、計算の仕方だけを教え、 「代数の公式等、形式的なものを、小学校を含め制限無しで使う」という事 が、「簡単・便利・生産性」を理由に許される事だと思いますか? #個々の物に密着した数(かず)を対象とせず、 #一般的に、数(すう)とそれに関わる概念を利用するなら、「数学的概念」は必須だと思います。 #数学者でなければ、数の概念等は必要無いのでしょうか? #また実際的に、数学者がその様な事を許すと思いますか? #ソフトウエア科学者・技術者はそれを容易に容認するんです。 勿論、社会で実際的にそうする事は可能でしょう。 しかし、例えば、その結果 「混乱した数の概念」を持つ子供達と その将来への影響は、恐らく想像すら出来ないと思います。 >こう考えれば、VB の仕様は納得がいきませんか? 私は、ここの会議室を通して、 正に、この事が 「VB」学習者の多くに起きている と実感しています。 今私は、とても危機感を持っています。 #「VB」学習者に何も起きていなければ、問題にしなかったと思います。 #「MS」はとても大きな責任と課題を背負っていると私は考えています。 最後に、この様な議論ができる場が出来た事は、とても有難いと思います。 「Jittaさん」に感謝します。 |