問題タブ [unmanagedresources]
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# - 管理されていないリソース、IDisposableおよびカスタムタイプ
私の質問に対する答えを見つけるために無数のトピックを読むのにうんざりしていたので、この主題に関するさらに別のトピック:)
次のクラスがあるとしましょう。
データベースへの接続はusingステートメント内でインスタンス化されるため、con.close()メソッドと最終的にはcon.dispose()メソッドが呼び出されますが、MyClassにIDisposableを実装する必要がありますか?MyClassは、スコープ外になるとガベージコレクションされますか?
編集:
お返事ありがとうございます、それは私が思ったことですが、それを明確にする必要がありました。もう1つ質問があります。
私のクラスにデータベースで何らかの作業を行う複数のOperations()がある場合、リソース消費の観点から、SqlConnectionメンバーを作成し、クラスコンストラクターでインスタンス化して開き、IDisposableを実装して閉じるのではなく実行することをお勧めします。各操作で「using」ステートメントを使用する(各操作でデータベースを開いたり閉じたりする)?もちろん、その方法では、ステートメントを使用する際にMyClassオブジェクトをインスタンス化して使用する必要があります。
.net - アンマネージDLLを出力ディレクトリにデプロイする
VS2010ソリューションを整理しようとしています。私を妨げている領域の1つは、アンマネージDLLの使用です。DLLが管理されていないため、参照として追加できません。以前のアプローチは、ビルド前/ビルド後のイベント中に「lib」フォルダーから出力フォルダーにDLLをxcopyすることでした。これの欠点は、ビルドごとに発生する不要なコピーであり、クリーン操作によって出力フォルダーからDLLが削除されることもありませんでした。
私の理想的な解決策は、DLLをVS libフォルダーに統合し、「新しい場合はコピー」機能を利用することです。ただし、VSは出力フォルダーにlibフォルダーを作成し、そこにDLLを配置します。プロジェクトツリーの最上位にDLLを配置することは好まないことに注意してください。DLLがたくさんあり、これがプロジェクトを汚染しているようです。
c# - 抽象基本クラスのIDisposableとデストラクタ
IDisposableと、デストラクタを除く完全な、、およびパターンを実装する抽象基本クラスがbool disposed = false
ありDispose()
ますDispose(bool)
。基本クラスは、派生クラスの多くがアンマネージリソースを解放する必要があるため、IDisposableを実装します。ただし、デストラクタを含むクラスは高価であるため、デストラクタを含めると、管理されていないリソースを持たない派生クラスが不必要に高価になると聞きました。私はこの問題について混乱しています。デストラクタを含める必要がありますか、含めない必要がありますか。その理由は何ですか。ありがとう。
visual-studio-2010 - 2003年、2008年から変換されたVisual Studio 2010プロジェクトの欠落したマニフェスト例外
最初に Visual Studio 2003 で作成され、2008 に変換された (成功した) Win Forms C++ ソリューションがあり、現在、それを Visual Studio 2010 に変換しようとしています。
ソリューションはエラーなしでビルドされ、実行すると、フォームのリソースからイメージ リストを読み込もうとすると、マニフェストが見つからないという例外が発生します。例外は、次のコード行で発生します。
問題が見つかったと思います。2008 アセンブリの ildasm を使用してマニフェストを調べると、フォームのリソースについて次のように表示されます。
2010 アセンブリのマニフェストは次のようになります。
最初のインスタンスの余分な「ネット」テキストと、2 番目のインスタンスの余分な ..$temp$Debug のために、それを見つけることができないと確信しています。
最後に、私の質問: プロジェクト設定のどこで修正すればよいですか? ..\temp\Debug はプロジェクト パスの一部です...「中間ディレクトリ」設定を $(Configuration) だけに変更すると、少し遊んでみると、次のようになります。
まだ例外を生成するマニフェストファイルで。
助けてくれてありがとう...
c# - using-キーワードを使用したこれら 2 つの実装の違い
MD5 ハッシュを作成する例として、マイクロソフトは次のコード サンプルを提供しています。
MSDN コード
それを使用すると、次のようになります
マイコード
Microsoft が提供するコードを変更すると、ヘルパー メソッドの再利用が容易になると思いました。
したがって、それを再利用すると、結果として作成されるコード行が少なくなります。
では、2 番目の例のようにそれを行わない目的は何ですか? 私の最初の考えは、MSDN が提供するコードを使用するプログラマーは、アンマネージ リソースを使用しているという事実(これは正しい用語ですか?)を常に認識しているのに対し、私の実装を使用した場合はそうではないということでした。
他の考えはありますか?
c# - アプリケーションが停止したときに外部プロセスを強制終了する
私は外部実行可能ファイル(私の場合はffmpeg)を呼び出す小さな部分に取り組んできました。次に、テストを作成し、デバッグモードでテストランナーを使用しました。デバッグを停止(終了)しても、ffmpegが実行されます。ファイナライザーでプロセスを強制終了しようとしましたが、IDisposableを使用しました-それでも実行されます。プロセスがそのように残されないようにするにはどうすればよいですか。呼び出し元が死亡したり、失敗したり、何らかの方法で停止したりした場合、ffmpeg実行可能ファイルは強制終了されます。
私はいつものようにプロセスを実行します(特別なことは何もありません)
c# - リソースをロックせずにBitMapオブジェクトを使用する
前の質問の答えから、Hans Passant
私はそれを理解しました:
はい、そのコードはファイルをロックします。ロックは、GDI +が作成するメモリマップトファイルオブジェクトによって生成され、ページングファイルにスペースを割り当てることなく、ファイルのピクセルデータをメモリに効率的にマップします。画像が画像ボックスに表示され、破棄されていない限り、ファイルを削除することはできません。ロックにより削除されません。
質問は、以前に使用した画像をから削除しようとしたときのエラー(時々)に関するものでしたPictureBox
。この正確な状況では、次のようにさえ呼んでいるようです。
イメージを削除するときが来たときに(これはあらゆる種類の管理されていないリソースである可能性があると思います)、イメージが破棄されることを保証するものではありません。
したがって、2つの質問があります。1つは、でBitMap
の使用に関する現在の問題とPictureBox
、それによって引き起こされるリソースのロックに関連しています。これが内部の画像を表示する唯一PictureBox
の方法ではないことを確認したので、この問題を引き起こさず、必要なときにいつでも画像が解放されて削除されることを保証する別の方法があります。
そして2番目の質問-.NETで管理されていないリソースを操作する必要がありDelete
、それらのような操作を行う必要がある場合の基本的なアプローチは何ですか。この問題は、.NETで管理されていないリソースを操作するときに発生する可能性があります。特定の瞬間にリソースをロック/解放し、中継しないという問題を解決するための一般的なアプローチはありますかGarbage Collector
(明らかに失敗します)リリースには異なる時間がかかる場合があるため、時々)。GC...
明示的に呼び出すためにメソッドを使用するfinilizer
ものもありますが、大学は、予測できない問題を引き起こす可能性があるため、これらのメソッドを使用しない方がよいと述べています。
では、ガイドラインや提案はありますか?
c# - ToolStripMenuItem には、基になるアンマネージ リソースがありますか?
私はToolStripMenuItem
いくつかのプロジェクト内で使用し、C# operator を使用して割り当てますnew
:
IDisposable
インターフェイスとusing
ステートメントに関する MSDN ドキュメントを読みました( http://msdn.microsoft.com/en-us/library/yh598w02.aspx )。ToolStripMenuItem に基になる管理されていないリソースがあるかどうかは、まだ不明です。
より正確には、Dispose(false)
何らかの例外が発生した場合、メソッドの呼び出しを処理する必要がありますか?