問題タブ [weak-references]
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# - WCF での弱参照を使用した単純なデータ キャッシュ
次の WCF サービスがあるとします。
データを検索する必要があるたびにデータベースにヒットしないように、弱い参照 (またはその他のアプローチ) を使用して州の郡をキャッシュする最も効率的な (または最良の) 方法は何でしょうか。
HttpRuntime (および HttpContext) にはアクセスできないことに注意してください。
java - ネストされた強参照を含むオブジェクトへの弱参照、およびガベージ コレクション
エンジンへの通常の (強い) 参照を持つ車への弱い参照があるとします。車またはエンジンへの他の参照は存在しません。エンジンをガベージ コレクションできますか?
actionscript-3 - AS3:初期化中に弱いリスナー参照が適切ではありませんか?
私が現在理解しているように、useWeakReferenceがtrueに設定されたオブジェクトにイベントリスナーが追加された場合、そのイベントリスナーはガベージコレクションの対象となり、ガベージコレクションがスイープを実行すると削除されます。
この場合、ガベージコレクターがオブジェクトの初期化中に追加されたため、オブジェクトイベントリスナーを削除するスイープをアクティブ化する場合に備えて、弱参照イベントリスナーを使用してオブジェクトを初期化することは適切ではありませんか?
この場合、オブジェクトが無効になる前にイベントリスナーを削除するタイプのdeallocate()メソッドを作成することだけが適切でしょうか?
garbage-collection - ガベージ コレクターは、WeakReferences が保持するオブジェクトをいつ強制終了するかをどのように決定しますか?
WeakReference によってのみ保持されていると思われるオブジェクトがあります。私は SOS と SOSEX を使用してその参照所有者を追跡しましたが、どちらもこれが事実であることを確認しました (私は SOS の専門家ではないため、この点で間違っている可能性があります)。
WeakReferences の標準的な説明は、GC がスイープを行うときにそれらを無視するというものです。それにもかかわらず、私のオブジェクトは GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced) の呼び出しに耐えます。
WeakReference でのみ参照されるオブジェクトがそのコレクションを生き残ることは可能ですか? 私が強制できるさらに完全なコレクションはありますか? それとも、オブジェクトへの唯一の参照が弱いという私の信念を再検討する必要がありますか?
更新と結論
根本的な原因は、オブジェクトをロックしている参照がスタックにあったことです。なぜ SOS も SOSEX もその参照を示さなかったのかは不明です。ユーザーエラーは常に可能性があります。
根本原因を診断する過程で、私はいくつかの実験を行い、第 2 世代オブジェクトへの WeakReferences が驚くほど長い間存続できることを実証しました。ただし、WRd 第 2 世代オブジェクトはGC.Collect(GC.MaxGeneration, GCCollectionMode.Forced) では存続しません。
.net - 複雑なオブジェクトグラフでのIDisposableアンマネージドリソースの生涯の問題?
この質問は、管理されていないリソース(COM相互運用)を処理し、リソースリークが発生しないようにすることに関するものです。私が物事を正しい方法で行っているように見えるかどうかについてのフィードバックをいただければ幸いです。
バックグラウンド:
2つのクラスがあるとしましょう。
COMオブジェクトのラッパーであるクラス
LimitedComResource
(一部のAPIを介して受信)。これらのCOMオブジェクトの数は限られているため、私のクラスはIDisposable
、COMオブジェクトが不要になったときにCOMオブジェクトを解放する役割を担うインターフェイスを実装します。別のタイプのオブジェクトは、で
ManagedObject
いくつかの作業を実行するために一時的に作成されますLimitedComResource
。彼らはそうではありませんIDisposable
。
上記を図にまとめると、私のクラスは次のようになります。
(これら2つのクラスのサンプルコードをすぐに提供します。)
質問:
私の一時的なManagedObject
オブジェクトは使い捨てではないので、私は明らかにそれらがどれくらいの期間存在するかを制御することはできません。しかし、その間に私はaが参照しているDispose
dを持っているかもしれません。もはやそこにないにアクセスしないようにするにはどうすればよいですか?LimitedComObject
ManagedObject
ManagedObject
LimitedComResource
私は現在、弱参照と、LimitedResource
オブジェクトがすでに破棄されているかどうかを示すフラグを組み合わせてこれを実装しています。より良い方法はありますか?
サンプルコード(私が現在持っているもの):
LimitedComResource
:
ManagedObject
:
c# - 準拠するC#コンパイラは、ローカル(ただし未使用)変数がオブジェクトへの唯一の強力な参照である場合、それを最適化できますか?
これらの関連リソースも参照してください。
- .NETガベージコレクターはコードの予測分析を実行しますか?(スタックオーバーフロー上)
- WP7:GCがローカル変数をガベージと見なすのはいつですか(MSDNのブログ記事)
言い換えると:
ローカル変数によって参照されているオブジェクトは、変数がスコープ外になる前に再利用できますか(たとえば、変数が割り当てられているが、再度使用されないため)、または変数が外れるまでガベージコレクションの対象外であることが保証されていますか?範囲?
説明させてください:
object
このコード例では、明らかに、新しい'edがガベージコレクターによって再利用される可能性を計画する必要があります。したがって、if
ステートメント。
weakRef
(私は、新しい'edがまだ存在するかどうかを確認することのみを目的として使用していることに注意してくださいobject
。)
このコード例の前のコード例からの主な変更点は、new'edobject
がローカル変数(unusedLocalVar
)によって強く参照されることです。weakRef
ただし、弱参照( )が作成された後は、この変数が再び使用されることはありません。
質問:準拠しているC#コンパイラーは、の最初の2行を、1つの場所でのみ、つまりコンストラクターへの引数として使用されているCase_2
とCase_1
判断した場合の行に最適化できますか?つまり、のアサーションが失敗する可能性はありますか?unusedLocalVar
WeakReference
Case_2
.net - .Netでの弱い辞書の適切な実装
IDictionary
内部で弱参照を使用する適切な実装はどこにありますか?
ディクショナリは値への弱参照のみを保持し、最終的にはデッド参照をクリーンアップする必要があります。
それとも私はそれを自分で書くべきですか?
.net - CLRでWeakListまたはWeakCollection(WeakReferenceなど)を実行する方法はありますか?
を使用すると、List<WeakReference>
希望どおりに機能しません。私が欲しいのは、WeakReferencesが参照するオブジェクトがガベージコレクションされるたびに、リストから自動的に削除されることです。
ConditionalWeakTable<TKey,TValue>
そのキーと値は弱く参照されて収集可能ですが、それらを列挙することはできないので、私も満足しません!
c# - 弱参照と使い捨てオブジェクト
C# では、ここで説明されているように、オブジェクトへの弱い参照を作成できます。
.net では、IDisposable インターフェイスを実装するクラスもあります。このインターフェイスの Dispose メソッドの呼び出しは、現在保持されているマネージド リソースまたはアンマネージド リソースを手動で破棄するために実行されます。例として、Bitmap オブジェクトまたはクラスがあります。
IDisposable を実装するオブジェクトを弱参照に割り当てた場合、弱参照がオブジェクトを収集すると Dispose が呼び出されますか?