人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

別マシンのDBの死活チェックをスレッド立てて定期的に行っています
※C++でADOと使用してDBアクセス

ここで、DBに接続する為のCreateInstanceは行っているが、
Releaseを行っていませんでした

この際、57000回程度の動作の後に落ちます

勿論、修正すべき点は判ったのですが、これで落ちる理由
(CreateInstanceの限界個数 等)の裏付けが、見当たりま
せん

事由を説明・証明出来る裏付け資料は無いでしょうか?


●質問者: gin106
●カテゴリ:コンピュータ インターネット
✍キーワード:けが アクセス スレッド 別マ 接続
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●35ポイント

Releaseを 行っていなかったということは オブジェクト ポインタへの参照を解放していなかったことになります。

つまり、メモリをどんどん消費しまくっていたということですね。

で、そのうち CreateInstanceを行っても メモリを 取得できなくなってしまうため エラーとなるのでしょう。

メモリ使用量の推移を確認してみてください。

なお 限界は 搭載している使用可能なメモリによって 変わってくるものと思われます。

http://msdn.microsoft.com/ja-jp/library/9e31say1%28VS.80%29.aspx

◎質問者からの返答

私も”そう”思ったのですが・・・・

サーバー機でも駄目駄目マシンでも期間に違いは有りません

本当にメモリ取得出来ないから落ちると言う図式なのでしょうか?


2 ● pyopyopyo
●35ポイント ベストアンサー

搭載メモリではなく、ハンドルが不足したのだと思います。

ハンドルの個数には上限があって、その個数の上限はOSとregistryの設定で決まります。

詳細は下記URLが詳しいです

http://technet.microsoft.com/ja-jp/windows/ee787049.aspx

同様の手順で、DBへ接続する度にハンドルがどれだけ消費されるかを調べれば、57000回程度で落ちる理由がはっきりすると思います。

あと、プログラム側で、きちんとエラーチェックする事をおすすめします。CreateInstance()の失敗時に、GetLastError() 等のAPIでエラーコードを調べれば、詳細な原因が判るはずです。

http://msdn.microsoft.com/ja-jp/library/cc428944.aspx

http://msdn.microsoft.com/ja-jp/library/cc428939.aspx

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ