問題タブ [try-finally]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# での try/finally のオーバーヘッド?
try
/catch
およびtry
/ catch
/をいつ、なぜ使用するかについて、多くの質問を見てきましたfinally
。try
そして、 /のユースケースが確実にあることを知っていますfinally
(特に、using
ステートメントの実装方法であるため)。
また、try/catch と exceptions のオーバーヘッドに関する質問も見てきました。
ただし、私がリンクした質問では、最終的に試行するだけのオーバーヘッドについては触れていません。
ブロックで発生するすべての例外がないと仮定すると、ステートメントがブロックを離れるときに実行されるtry
ことを確認するためのオーバーヘッドはいくらですか (関数から戻ることもあります)?finally
try
繰り返しますが、私はtry
/ finally
、 no catch
、例外のスローについてのみ尋ねています。
ありがとう!
編集:さて、私はユースケースをもう少し良く見せようとします。
どちらを使用する必要がありますDoWithTryFinally
かDoWithoutTryFinally
?
このケースは、リターン ポイントが 2 つしかないため単純化しすぎていますが、4 つ、10 つ、または 100 のリターン ポイントがあると想像してみてください。
ある時点で、次の理由でtry
/を使用したいと思います。finally
- DRY の原則を守る (特に、出口ポイントの数が増えるにつれて)
this.Working
内部関数が例外をスローしていないことが間違っていることが判明した場合は、が に設定されていることを確認したいと思いfalse
ます。
したがって、パフォーマンス上の懸念、保守性、および DRY の原則を考慮して、 (特にすべての内部例外がキャッチされると仮定できるtry
場合) 出口点の数に対して、 /に関連するパフォーマンスのペナルティを被りたいと仮定しfinally
ますか?
編集 #2:の名前を に変更しthis.Working
ましたthis.IsBusy
。申し訳ありませんが、これがマルチスレッドであることを忘れていました (ただし、実際にメソッドを呼び出すスレッドは 1 つだけです)。他のスレッドは、オブジェクトがその作業を行っているかどうかを確認するためにポーリングします。戻り値は、作業が期待どおりに行われた場合の成功または失敗です。
java - Java TryCatchFinallyはCatchなしでブロックします
私はいくつかの新しいコードをレビューしています。プログラムには、tryとfinallyブロックのみがあります。catchブロックは除外されているので、例外やスロー可能なものが発生した場合、tryブロックはどのように機能しますか?それはfinallyブロックに直接行くだけですか?
java - finallyブロックでオブジェクト参照がnullに設定されました
なぜ出力はnullではなくCoolReturnなのですか?
よろしく、
マヘンドラアスネリア
java - 保存された値をfinallyブロックに復元しますか?
このパターンがいくつかの異なる場所で使用されているのを見てきましたが、それが何のためにあるのか、なぜそれが必要なのか正確にはわかりません。質の高いプロジェクトで見たことがあるので、役に立つと思いますが、盲目的にフォローするのではなく、理解したいと思います。このパターンは、サーブレットフィルターとStruts2インターセプター(概念的にはフィルターと非常によく似ています)で特に見られます。
Google Guice(サーブレット)3.0の例を次に示します。
finallyブロックの値を復元するための必要性または利点は何ですか?
java - ネストされたリーダーを閉じる
テキスト ファイルから読み取る場合、通常は を作成しFileReader
、それを にネストしBufferedReader
ます。読み終わったら、2 つのリーダーのどちらを閉じる必要がありますか? それは問題ですか?
例外安全性に関しては、私は少し妄想的です。BufferedReader
コンストラクターが例外をスローするとどうなりますか? ネストされたリーダーを閉じますか? それとも、投げないことが保証されていますか?
python - データベースのダウンを許可しながら cx_Oracle 接続を閉じる
データベースが起動している場合、次のcx_Oracle
コードは正常に機能します。
しかし、このスクリプトを実行したときにデータベースがダウンしていると、aNameError
が発生します。
これは私には理にかなってい cx_Oracle
ます。接続をインスタンス化できなかったため、変数conn
が設定されなかったため、close()
メソッドがありません。
Python で、ダウンしたデータベースの状態を適切に処理しながら、データベース接続を確実に閉じる最善の方法は何ですか?
次のようなことをするのは、私には大したことのように思えます:
.net - リソースのクリーンアップに「使用」および「最終的に」を使用する場合
以下のような仕組みが必要な場合はありますか?
または、すべてのクリーンアップタスクを暗黙のsomething.Dispose()
呼び出しで実行する必要がありますか?
問題のあるコードは次のとおりです。
注:この関数のユーザーがsの作成を直接Parameter
処理する必要がないように、クラスを定義しました。SqlParameter
クラスのSqlParameter
プロパティをParameter
使用して、を取得できますSqlParameter
。
ある時点で、私のプログラムは次のことを行います(多くのクラスが含まれるため、コードを投稿できません。基本的に、多くのオブジェクトを作成するミニフレームワークがあります)。
- の配列を作成します
Parameter
。 GetDataTable('sp_one', parameters)
。GetDataTable('sp_two', parameters)
。
delphi - ネストされたtry/finallyブロックを抽出します
ネストされたtry/finalブロックをルーチンから再利用可能なエンティティにどのように「抽出」しますか?私が持っていると言う
のようなものが欲しい
ネストされたオリジナルと同じ例外安全性を持たせたいです。ResourceN変数をゼロで初期化し、チェックインするだけで十分TDoSomething.Init
ですif Assigned(ResourceN) then
かTDoSomething.Done
?