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

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

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

Re[2]: .net アプリ起動時にDBを開くことについて


(過去ログ 117 を表示中)

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

■68819 / inTopicNo.1)  .net アプリ起動時にDBを開くことについて
  
□投稿者/ aoi (1回)-(2013/11/19(Tue) 13:04:52)

分類:[.NET 全般] 

.NETでWindowsアプリを作成しています。

私は
DBConnectionは使用する直前に開き
使用後はすぐに閉じるように設計します。
DB接続の開閉はトランザクション単位になります。

稀に
システムの起動時にDBConnectionを開き
システム終了時に閉じるような設計を見るのですが
windowsアプリであれば特に問題ないのでしょうか?

asp.netでは接続するユーザー数が問題になるので
Db接続の開閉はできるだけ短くするのが好ましいと思っていますが
この考えは正しいでしょうか?
引用返信 編集キー/
■68823 / inTopicNo.2)  Re[1]: .net アプリ起動時にDBを開くことについて
□投稿者/ WebSurfer (85回)-(2013/11/19(Tue) 18:19:40)
No68819 (aoi さん) に返信
> .NETでWindowsアプリを作成しています。

> 稀に
> システムの起動時にDBConnectionを開き
> システム終了時に閉じるような設計を見るのですが
> windowsアプリであれば特に問題ないのでしょうか?

閉じない理由があるから閉じないということではないのですか?

閉じられるのに閉じないというようなコーディングをしてあるとする
と、自分的には、そのプログラマが無知ではないのかと疑います。

プログラマの考えるシナリオ・想定の範囲内では複数の Connection
を開くことはないとしても、何をするか分からないユーザー、データ
ベースの障害など想定外のことが起きるかもしれません。

どんな場合でも問題が発生しないように、使い終わったら即クローズ
する、例外がスローされても try - finally 句などを使って確実に
クロースされるようにするのは、ASP.NET に限らず、データベース
接続における基本だと思います。

それから、SQL Server などでは問題ないかもしれませんが、一部の
データベース(Access だったかな?)では編集結果がデータベース
に反映されるタイミングの問題で、Close しないとうまく行かない
という問題があったと記憶しています。

というわけで、開けたらすぐ閉めるを基本とすることをお勧めします。
引用返信 編集キー/
■68825 / inTopicNo.3)  Re[1]: .net アプリ起動時にDBを開くことについて
□投稿者/ おk (1回)-(2013/11/19(Tue) 20:27:54)
No68819 (aoi さん) に返信
> .NETでWindowsアプリを作成しています。
>
> 私は
> DBConnectionは使用する直前に開き
> 使用後はすぐに閉じるように設計します。
> DB接続の開閉はトランザクション単位になります。
>
> 稀に
> システムの起動時にDBConnectionを開き
> システム終了時に閉じるような設計を見るのですが
> windowsアプリであれば特に問題ないのでしょうか?
>
> asp.netでは接続するユーザー数が問題になるので
> Db接続の開閉はできるだけ短くするのが好ましいと思っていますが
> この考えは正しいでしょうか?

正しい。

ユーザー数うんぬんを抜きにしても、ストリーム接続はすぐ閉じるべき。
引用返信 編集キー/
■68826 / inTopicNo.4)  Re[1]: .net アプリ起動時にDBを開くことについて
□投稿者/ aoi (2回)-(2013/11/19(Tue) 21:41:00)
私もコネクションはできるだけ短いスコープで開閉する方が良いと思います。

しかしVB時代の慣習なのか
システム起動時に接続をOpenし、システム終了時に接続をCloseする
というシステムはときどき見かけます。

こういった手法(?)を取る方はこれが良いという持論をお持ちなのだと思います。
こういった方たちに接続は短いスコープで開閉することを薦めるとき
ASP.NETではユーザー数が問題になるのでと言えますが
Windowsアプリの場合は説得できるコレといった弊害がなく説得できずにいます。

※今はクラウド化するときにコード修正が手間になりますとか言えばよいのかな?

なにかこんな困ったことが発生するといった情報はないでしょうか?


>それから、SQL Server などでは問題ないかもしれませんが、一部の
>データベース(Access だったかな?)では編集結果がデータベース
>に反映されるタイミングの問題で、Close しないとうまく行かない
>という問題があったと記憶しています。
ありがとうございます!
こういった情報がもっとあれば(できればOracleやSQLServerで)説得できるかもしれません。

引用返信 編集キー/
■68827 / inTopicNo.5)  Re[2]: .net アプリ起動時にDBを開くことについて
□投稿者/ Jitta (92回)-(2013/11/19(Tue) 21:44:22)
Jitta さんの Web サイト
2013/11/19(Tue) 21:45:43 編集(投稿者)

No68826 (aoi さん) に返信
> しかしVB時代の慣習なのか
> システム起動時に接続をOpenし、システム終了時に接続をCloseする
> というシステムはときどき見かけます。
>
> こういった手法(?)を取る方はこれが良いという持論をお持ちなのだと思います。
> こういった方たちに接続は短いスコープで開閉することを薦めるとき
> ASP.NETではユーザー数が問題になるのでと言えますが
> Windowsアプリの場合は説得できるコレといった弊害がなく説得できずにいます。
>
> ※今はクラウド化するときにコード修正が手間になりますとか言えばよいのかな?
>
> なにかこんな困ったことが発生するといった情報はないでしょうか?

http://el.jibun.atmarkit.co.jp/pressenter/all_entrylist.html
ここで取り上げられるような人たち、かな。

ごめん、こっちだ。まさに、これだ。
http://el.jibun.atmarkit.co.jp/pressenter/2012/09/1-0f4e.html
引用返信 編集キー/
■68828 / inTopicNo.6)  Re[2]: .net アプリ起動時にDBを開くことについて
□投稿者/ WebSurfer (86回)-(2013/11/19(Tue) 22:33:37)
No68826 (aoi さん) に返信
> 私もコネクションはできるだけ短いスコープで開閉する方が良いと思います。
>
> しかしVB時代の慣習なのか
> システム起動時に接続をOpenし、システム終了時に接続をCloseする
> というシステムはときどき見かけます。
>
> こういった手法(?)を取る方はこれが良いという持論をお持ちなのだと思います。
> こういった方たちに接続は短いスコープで開閉することを薦めるとき
> ASP.NETではユーザー数が問題になるのでと言えますが
> Windowsアプリの場合は説得できるコレといった弊害がなく説得できずにいます。
>
> ※今はクラウド化するときにコード修正が手間になりますとか言えばよいのかな?
>
> なにかこんな困ったことが発生するといった情報はないでしょうか?

そのような意識の低い人がいる SW 会社は取引停止にすればいいのではないですか。

ロケットが落ちたり、ライフラインが停止したりする前に、そのような会社は淘汰
されるべきだと思います。

すばらしい人がいる反面、ほんとにこの業界にはとてもプロとはいえない人がいる
ように思えますが、思い違いでしょうか?

引用返信 編集キー/
■68829 / inTopicNo.7)  Re[3]: .net アプリ起動時にDBを開くことについて
□投稿者/ aoi (3回)-(2013/11/19(Tue) 22:41:29)
> ごめん、こっちだ。まさに、これだ。
> http://el.jibun.atmarkit.co.jp/pressenter/2012/09/1-0f4e.html
読んできました。

webの場合はこういった問題があることは知っています。
なので接続は必ず最少スコープで開閉するように持っていけるのですが

windowsアプリの場合はアプリ単位で接続が確立して、コネクションプーリングは機能しない(機能する必要がない)ので
最少スコープで開閉するように説得することが難しいのです。
引用返信 編集キー/
■68835 / inTopicNo.8)  Re[4]: .net アプリ起動時にDBを開くことについて
□投稿者/ Jitta (94回)-(2013/11/20(Wed) 22:41:12)
Jitta さんの Web サイト
No68829 (aoi さん) に返信

> windowsアプリの場合はアプリ単位で接続が確立して、コネクションプーリングは機能しない(機能する必要がない)ので
> 最少スコープで開閉するように説得することが難しいのです。

 コネクションプーリングと、「都度接続しましょう」とは、関係ありませんが?
というか、コネクションプーリングの機能があるから、
都度都度切断しても再接続の時間を短縮できるので、パフォーマンスを確保できます。

 デスクトップアプリであっても、“サーバにあるデータベース”に接続するなら、
データベースは一定数の接続しか許容しません。よって、多数のデスクトップから接続すると、
「誰かがアプリを終えるまで待たなければならない」状況が発生します。

 また、アプリに何らかのバグがあって、きちんとした手続きを経ずに終了すると、
接続が1つ浮いてしまいます。もっともこれは、都度接続でも同じですが、
アプリ起動中に渡って接続を保持する方が、発生する可能性が大きくなります。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

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

管理者用

- Child Tree -