過去の桐井戸端BBS (桐ver.9)
22687 表はこまめに閉じる方が良いのでしょうか 沼田 2003/10/09-11:50
表(tblファイル)の取り扱いについて確認したいことがあります。
桐を使っていくには頻繁にtblファイルを使っていくことになりますが、
開いたtblファイルはこまめに閉じていく方が好ましいのでしょうか。

この質問は、「現在、処理していく上で困っているのでアドバイスを下さい」というものではありません。
緊急を要するものではありませんが、常々「どちらが良いのか」と気になってきたテーマです。
じっくりと、いろんな方の意見を聞いてみたいと思い、投稿しました。

tblファイルに限りませんが、ファイルを開くには相応の時間がかかると思っています。

桐Ver5時代(Windows以前)の感覚では、必要なファイルは事前にまとめて開いておく、という意識がありました。
その後は「編集表」コマンドで処理対象の表を切り替えながら作業を進めていく、という方式です。

これによって、その場その場で必要とされるファイルを開くための処理時間を短縮することができました。
昔(桐Ver5時代)は、tblファイルのデータを読み込むにも気になるほどの時間が必要でしたから。
そのために、できるだけ小さなファイルにしようと工夫もしたものです。

しかし、時代はWindowsで、トロンにさえ移行しようかという時代ですから、
表がオープンされるための処理時間など気にする必要はないとも感じられます。

気にする必要のない程度の大きさのファイルなら、必要とされる度にオープンして、
処理が終わる度にクローズする、という使い方でも良いし、まとめてオープンしておいて、
最後の最後にまとめてクローズしておく、という使い方でもどちらでも良いようにも思えます。

もちろん、それぞれの処理の内容によって、書き出しの対象になるファイルなど、
必ずクローズしておかなければならないパターンもありますから、その場合を除くとして、
開いておいても支障のないファイルなら最後の最後まで開きっぱなしにしておくことも可能ではないかと思っています。

しかし、それぞれにメリットとデメリットはあるだろうし、「こちらの方が好ましい」という視点もあるのではないかとも思います。
例えば、オープンには多少なりとも処理時間がかかることはデメリットと言えると思いますが、
オープン時点でBackUpファイルが確保されることはメリットと言えるのではないかと思えます。

データ保護の観点から見ると、こまめに閉じ、次に使う時にオープンすることによってBackUpを確保する方が
良いのかもしれないと感じることがあります。
数百KB程度のファイルなら、オープンに係る時間も編集表コマンドで切り替える時間も、
人間には区別できない程度に収まるのではないか、と感じられますから、
こまめに閉じる方が「好ましい」のかな、とも思います。

もちろん、共有利用ではBackUpが作られないからメリットがなくなるとか、
イベント内から開いた場合や一括処理から開いた場合の挙動の違いなども有り
一概には言えないと思いますが、「これからシステムを組んでいこう」とした場合に、
事前にオープンしておいて編集表コマンドの切り替えで処理を組んでいくというのを
出発点にするのか、それぞれでオープンしていけば良いという感覚を出発点にするのか、
どちらの方が好ましいのかという点について、いろんな意見を聞かせていただけるならうれしいと思っています。
22688 Re:表はこまめに閉じる方が良いのでしょうか 悲しげ 2003/10/09-13:26
記事番号22687へのコメント
どもっ、沼田さん
私の場合は、結果的に「こまめに開閉する」ですね。
これはどちらがいいかとか云った選択の余地なく、そうなっています。
と云うのは、私の場合、桐ver8以降でイベントを使うようになってから、
いわゆる古典一括を使うのは殆どがちょっとした一時的なものに過ぎず、
本格的な処理をさせるにはイベントで組むようにしているからです
(なぜイベントを使うかと云うと、その方が諸々できるから)。
中でも、チラリと先述したとおり、モードレス(非モーダル)で動かすにはスキルが乏しい私は、
殆どが「フォーム呼び出し」系のモーダルフォームで使っています。
こうなると、表の開閉はまずはフォームの開閉に規定されますから、
選択の余地がない訳です。
併せて、イベントの中で一時的に別な表を開いて処理させる場合は、
処理終了後、逐一閉じるようにします。
後でまとめて閉じようとすると、しばしば忘れてしまって不都合を来たしそうなので、
その都度こまめに開閉するように習慣づけています。
編集対象表を設定しているフォームでは「表」コマンドで全閉させることもできないので。

なお、上記は、マシンが高速化したので表のオープンに要する時間は
殆ど無視できるだろうことを前提としています。(フォーム開始イベント等で複雑なことをさせていない限りは)

モードレスフォーム(「開く」ボタン、「ウィンドウ作成」コマンド等)や
古典一括を中心に使っている人なら、また別な意見もあろうかとは思います。
私が書いたことは、あくまで、よい・悪いと云う判断の結果ではありません。

22691 Re:表はこまめに閉じる方が良いのでしょうか 宮城 2003/10/09-15:48
記事番号22687へのコメント
沼田さん、こんにちは。

まあ、月並みですが、どのくくりで言うかによっても違うでしょうが、
ひとまとめになるくくりの「処理」ごとにまとめて開きまとめて閉じるようにしています。

決め手はネットワーク環境などでは「すべての表が常にすべて望んだ形態で開けるとは限らない」こと。

一連の処理の途中で、特定の表が誰かが使用中(多くは開きっぱなしになってただけ)とかで
開けなかったりしたら、実に情けないことになります。(;_;)

単独で自機 HDの表を使ってるだけならこんなの関係ないでしょうね。
22698 Re:表はこまめに閉じる方が良いのでしょうか KH 2003/10/09-20:45
記事番号22691へのコメント
沼田さんこんばんは。宮城さんご無沙汰しています。

>一連の処理の途中で、特定の表が誰かが使用中(多くは開きっぱなしになってただ
>け)とかで開けなかったりしたら、実に情けないことになります。(;_;)

仮に共有状態で複数の人が同じデータを開いて作業できたとしても、
共有の場合バックアップファイルを作りませんから、
開きっぱなしにしている人間が1人でもいた状態でハングアップしたりすることを考えたらとても
「開きっぱなし」にはできません。

「こまめに閉じる」は桐に限らず、複数のアプリケーションを開きっぱなしで作業をしていて不具合を生じて
データを失ったことがある方は当然のこととしているのではないでしょうか。

また、オープン・クローズに時間がかかるといわれていますが、
マクロを含んだエクセルのデータのオープン・クローズより桐の場合ずっと速いと思います。
確かにネットワーク上ではローカルのハードディスクにあるようには速くありませんが・・・
22734 Re:表はこまめに閉じる方が良いのでしょうか 佐田 守弘 2003/10/13-00:09
記事番号22687へのコメント
沼田さん
私も「表はこまめに閉じる」方の立場ではあり、またMS-DOS桐の時代には、
その様にする事を提唱して来ました。
しかし、Windows環境で共有で使うケースでは、必ずしもそう断定できるものでもない様にも思えます。
・スタンドアロンで使うのか、ネットワーク状で使うのか。
・専有モードで使うのか、共有で使うのか
・置換など表を専有する必要がある処理が多いのか
などによっても変わって来るかと思います。

とは言え、文面の
>データ保護の観点から見ると、こまめに閉じ、次に使う時にオープンすることによ
>ってBackUpを確保する方が良いのかもしれないと感じることがあります。
から推定すると、スタンドアロンに近い状態でほぼ専有で使っているのではないかと思います。
この様な場合には、こまめにオープンクローズを行う事によって、
ドライブ装置にデータが書き出され、また以前の表もバックアップファイルとして残るので、
データ保全の点からは好ましいかと思います。

●共有で多数のユーザが1つの表を使う場合
共有モードの時には、バックアップファイルなしになり、編集用のテンポラリファイルは作られずに、
オリジナルの表に直接書き込みが行われます。
編集中のデータは、桐のワークメモリ上で処理されますが、
比較的短い時間で元の表に結果が反映される筈です。
おそらく、レコードロックが解除される時点で、
書き戻されるのではないかと思います(そうでないと不都合が生じる)。

共有で開いている場合、どの様な編集を行うかにも寄りますが、
ファイルのオープンクローズを繰り返すのは、一般論としてはあまり意味がない様にも思います。

●表はフォームによって開かれる
ウインドず版桐でフォームを使う場合、フォームから開くのが一般的な方法です。
この場合、悲しげさんも書かれている通り、フォームによって表が自動的に開かれ
フォームを閉じると表も閉じられます。
座席予約の様なケースでは、おそらく一日中同じフォームが開かれ放しになるので、
必然的に表も開かていることになると思います。
一方、あるフォームから別の表を開くフォームをモーダルで開けば、
そのフォームが閉じるときに、そのフォームで開いた表も閉じられます。

報告書を作成する様な使い方でも、1レコードの編集にそれこそ数時間も要したり、
途中で席を立つ事もあります。この様な場合には、時々フォームを閉じて途中までの
データを書き込んだりして、万一の障害に備えています。

●表を開く時間
桐が表を開く時間はそれ程長いものではない様です。表が開かれると、
まず表の定義内容が読み取られます。
次いで、索引が読み込まれます。その次にデータの最初のページが読まれて、表示されます。
つまり、大きな表でも小さな表でも、表が開かれる時間はあまり変わりません。
ただし膨大な表で索引が大きければ、その分の時間がかかります。

●途中でフリーズした場合に生じる障害
この質問の主旨は、むしろここにあるのではないかと思います。
・専有モードでバックアップ有の場合
表は開かれますが、元の表には一切手を加えず、テンポラリファイルに元の表から
読み出したデータを元にして編集結果を書き込んで行きます。
表を閉じる時点で、このテンポラリファイルを表ファイルとして完成させ、元の表をバックアップファイル
にリネームした後、テンポラリファイルを表ファイルにリネームして完了します。
従って、途中でフリーズが発生すると、開く前の結果は保全されますが、
編集内容は全て失われます。
・バックアップなしの場合
編集結果は逐次、表に書き込まれて行きます。
途中でフリーズが発生した場合、原理的には編集が終ったレコードは、
表ファイルに書き込まれているはずですが、運が悪く、書込途中で電源が落ちたようなケースでは、
表ファイルが破損するケースも起こり得ます。
また、OSのライトキャッシュの動作や、ドライブ上のバッファメモリの動作も加わりますから、
実際にはどうなるのかは、予測が難しいかと思います。

佐田守弘(KS-00119)

戻る