問題タブ [using]
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# - `using(...)` を効果的に使用しても役に立たない、または非効率的ですか?
次のコードは、using(...)
機能/目的を無関係にしますか?
GC のパフォーマンスが低下する可能性はありますか?
出力: SuperDisposable
この機能についての私の理解は、 のusing(...)
破棄を直ちに強制することDisposableClass
です。ただし、コード ブロック内では、クラスをディクショナリ コレクションに追加しています。私の理解では、クラスは本質的に参照型です。したがって、私の実験は、この方法でコレクションに追加された使い捨てオブジェクトに何が起こるかを確認することでした。
この場合DisposableClass
、まだかなり生きています。クラスは参照型であるため、コレクションは単にこの型を参照するのではなく、実際にクラスを値として保持していると仮定しました。しかし、それも意味がありませんでした。
それで、実際に何が起こっているのですか?
編集:いくつかの回答で示唆されているように、オブジェクトが死んでいないことを証明するために出力を含むコードを修正しました。
2番目の編集:さらにコードを調べたときに、これがどうなるかは次のとおりです。
メソッドに渡されるコード ( にブレークポイントがありましたprivate void Dispose(bool dispose)
) をステップ実行false
すると、ここでリソースを適切に破棄することが不可欠になります。とにかく、クラスはまだ生きていますが、間違いなく例外を設定しています。答えは私をより興味深くしました...
linq - LINQ-SQLでは、DataContextのラップはusingステートメントです-pros cons
パフォーマンス、メモリ使用量、コーディングの容易さ、正しいことなどの要素の観点から、誰かがデータコンテキストをusingステートメントでラップするかLINQ-SQLでラップしないかについて、賛否両論を提案できますか?
更新:ある特定のアプリケーションで、ブロックを使用する際にDataContextをラップせずに、ライブオブジェクトがGC用にリリースされなかったため、メモリ使用量が増加し続けることを経験しました。以下の例のように、qオブジェクトのリストへの参照を保持し、qのエンティティにアクセスすると、GC用にリリースされていないオブジェクトグラフを作成します。
を使用したDataContext
使用せずに存続するDataContext
ありがとう。
c# - C#: ブロックの使用: オブジェクトの再初期化
「using」ブロック内での再初期化は、常に避けるべき悪い考えです。それでも私はこれを尋ねるつもりです:
「using」呼び出しが、最後の参照または再初期化ではなく、元の値で破棄されるのはなぜですか (try finally ブロックが使用されている場合に発生します)。
上記のコードでは、dispose は元の参照で呼び出され、新しい参照では呼び出されません。これは、dispose メソッドでコンソールに何かを出力することで簡単に確認できます。
ただし、try{} finally コードでは、最後の参照破棄メソッドが呼び出されます。
MSDN : using ステートメントにより、オブジェクトのメソッドを呼び出しているときに例外が発生した場合でも Dispose が呼び出されることが保証されます。
基本的に「使用する」は次のように変換されます。
c# - usingブロックは、GCの参照を作成および維持しますか?
これは主に好奇心のためです。この構成で考えられるほとんどすべてのユースケースを実装するためのより良い方法があります(少なくとも、C#や他の言語では、私は定期的に使用しています)が、最近、スコープ付きミューテックスをここで見ました。クールなコンセプト。
私の質問は、usingステートメントは、それが作用しているオブジェクトへの参照を維持しますか(つまり、GCが実行されないようにしますか)?
たとえば、私が行う場合:
ScopedMutexオブジェクトは、usingブロックの最後までその存在を維持しますか、それともGCを実行して、ブロックの途中で破棄しますか?
c# - using ステートメントの使用法
重複の可能性:
C# で IDisposable に対してステートメントを使用するか、Dispose() を呼び出すと、どちらが優れていますか?
C# で "using" ブロックを使用する必要があるのはいつですか?
using if ステートメントを使用していますか?
using
適切に、ステートメントをどのように使用しますか? チュートリアルを開いていますが、理解できません。そして、私は実装するための複数の異なる方法を見ることができます. どちらが正しい方法または好ましい方法ですか?
c# - using() ステートメント内から戻ることの副作用はありますか?
次のように、DataContext を取得する using ステートメント内からメソッド値を返すと、常に正常に動作するようです。
しかし、using ステートメントの前にトランザクションを定義し、括弧内の値を取得し、括弧の後に戻るなど、using ブラケットから抜け出す前に何かを閉じる必要があると常に感じています。
括弧を使用して変数を定義して返すことは、より良い方法であるか、何らかの方法でリソースを節約しますか?
c# - 別のファイルのC#名前空間/クラスを表示するとエラーが発生します
「HOD」と「Controllers」の2つのプロジェクトがあります。Controllersは、名前空間が「Controllers」のクラスライブラリです。HODのコードファイルで、「Controllersを使用して」Controllers名前空間を参照しようとしています。HODプロジェクトの参照をControllersに追加しましたが、VS2008のreferencesフォルダーに表示されます。
プロジェクトをビルドするとエラーは発生しませんが、ページを表示すると「タイプまたは名前空間名「Controllers」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)」というエラーが表示されます。 。
Controllers.cs(クラスライブラリ、Controllersプロジェクト)
index.aspx.cs(HODプロジェクト)
プロジェクトはWebサーバーにあり、Controllers.dllはHOD.dllと同じbinフォルダーにあります。よろしくお願いします!
編集:.slnの内容
コンパイラ出力
------再構築すべて開始:プロジェクト:コントローラー、構成:任意のCPUのデバッグ------ C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ Csc.exe / noconfig / nowarn:1701、 1702 / errorreport:prompt / warn:4 / define:DEBUG; TRACE / reference: "C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll" / reference: "C :\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Data.DataSetExtensions.dll "/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll / reference: "C: \ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Xml.Linq.dll "/ debug + / debug:full / filealign:512 / optimize- / out:obj \ Debug \ Controllers.dll /目標:ライブラリClass1.csProperties\ AssemblyInfo.cs
コンパイルが完了しました-0エラー、0警告コントローラー-> Y:\ HOD2 \ Controllers \ bin \ Debug \ Controllers.dll ------再構築すべて開始:プロジェクト:HOD、構成:任意のCPUのデバッグ----- --C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ Csc.exe / noconfig / nowarn:1701,1702 / errorreport:prompt / warn:4 / define:DEBUG; TRACE / reference:Y:\ HOD2 \ Controllers \ bin \ Debug \ Controllers.dll / reference:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Configuration.dll / reference: "C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll "/ reference:" C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Data.DataSetExtensions.dll "/ reference:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll / reference:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.dll / reference:C:\ Windows\Microsoft。NET \ Framework \ v2.0.50727 \ System.Drawing.dll / reference:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.EnterpriseServices.dll / reference:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Web.dll / reference: "C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Web.Extensions.Design.dll" / reference: "C:\プログラムファイル(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Web.Extensions.dll "/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Mobile.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll / reference:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Xml.dll / reference :"C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Xml.Linq.dll" / debug + / debug:full /optimize-/out:obj\Debug\HOD.dll /目標:ライブラリindex.aspx.csindex.aspx.designer.csProperties \ AssemblyInfo.cs
コンパイル完了-0エラー、0警告HOD-> Y:\ HOD2 \ bin \ HOD.dll ==========すべて再構築:2成功、0失敗、0スキップ======= ===
c# - 「using」キーワードを使用すると廃棄されるもの
例を見てみましょう:
SomeOtherObject
IDisposableも実装します。SomeObjectが破棄されるときに、SomeOtherObjectも破棄されますか?SomeOtherObjectはどうなりますか?(SomeOtherObjectの破棄は、SomeObjectのDisposeメソッドには実装されていません)
scala - 「使う」機能
「using」関数を次のように定義しました。
私はそれを次のように使用できます:
今、「using」関数を定義して任意の数のパラメーターを取り、それらに個別にアクセスできるようにする方法に興味があります。
java - 秘密鍵の使用方法
私の検索で、myrsakey.pemという秘密鍵を生成できることがわかりました。この鍵が使用されるこの鍵の目的は何ですか。助けてください。
よろしくシャルン。