問題タブ [object-lifetime]
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.
asp.net-mvc-2 - シングルトンは、ASP.NET MVC の要求間で自動的に永続化されますか?
データベースからフェッチされたものに基づいて計算するために、かなりの量のリクエストで使用する数千の整数のルックアップ テーブル (LUT) があります。
単純に LUT を保持するための標準的なシングルトンを作成した場合、それはリクエスト間で自動的に永続化されますか?それとも特にアプリケーション状態にプッシュする必要がありますか?
それらが自動的に永続化される場合、それらをアプリケーション状態で保存する違いは何ですか?
正しいシングルトンの実装はどのようになりますか? 遅延初期化する必要はありませんが、スレッド セーフ (サーバー インスタンスあたり数千の理論上のユーザー) であり、優れたパフォーマンスを備えている必要があります。
編集: Jon Skeet の 4 番目のバージョンは有望に見えます http://csharpindepth.com/Articles/General/Singleton.aspx
.net - .NET:オブジェクトにオブジェクトへの参照があるかどうかを判断する方法は?
Q.オブジェクトに「強い参照」があるかどうかを確認する方法はありますか?
レイモンド・チェンは、解決策が可能かもしれないとほのめかしました:
参照カウントがゼロか非ゼロかを知りたい。そのためには、WeakReferenceを使用します。
ノート
- オブジェクトへの「弱い参照」があります(WeakReferenceを使用)。私が強い参照を持っていた場合 、答えはすぐに次のようになります:「はい。あなたはオブジェクトへの強い参照を持っています。」
- ガベージコレクターは答えを公開しません
- IsAliveプロパティは、オブジェクトが収集されたかどうかのみを通知できます。それへの強い言及があるかどうかではありません。(参照のないオブジェクトは収集されない可能性があります-GCはまだそのオブジェクトに到達していません)
- .NETのオブジェクトは参照カウントされません
- すべてのオブジェクトがIDisposableインターフェースを実装する必要はありません
- すべてのオブジェクトが私のものではありません
コードサンプル
このコードサンプルは、ガベージコレクションとWeakReferenceのIsAlive
プロパティを強制して、オブジェクトに未処理の参照があるかどうかを判断する際の問題を示しています。
garbage-collection - GC 言語での RAII の (またはより適切な使用) に関する研究はありますか?
注: オブジェクト ライフタイム RAII を使用しない/ブロック スコープ RAII を使用する
追加の gc カテゴリ、短命のオブジェクト (gc カテゴリをやや頻繁にチェックする)、長命のオブジェクト (gc カテゴリをそれほど頻繁にチェックしない)、およびリソース オブジェクト (gc カテゴリを非常に頻繁にチェックする) を使用することは可能のようです。または、リソース オブジェクトの追加の参照カウント gc を使用することもできます。
using/with スタイルは、I/O のより機能的なスタイル (私が間違っていて、これが機能的なスタイルでない場合は許してください) を促進することで、いくつかの利点があるようです。オブジェクトベースの RAII の柔軟性 (簡単だから)。しかし、問題によっては、リソースの有効期間を追跡するのが難しい場合があります。
gc の複雑さと速度を回避する以外に、これが主流の言語で行われていない理由はありますか?それらの仕様では、一部のタイプのオブジェクト/またはすべてのオブジェクトの参照カウントが指定されておらず、人々が使用する他の実装には参照カウントがなく、それらの言語でのオブジェクトの有効期間 RAII の使用が制限されています。
PS:Perl に C++ タイプの RAII はありますか?
c# - C#スレッドオブジェクトの有効期間
次のようなコードがあるとします。
2つのスレッドがあります。メインスレッドをMain()関数を実行しているスレッドと呼び、「if」テスト内でスレッドAとして新しく作成されたスレッドを呼び出します。
私の質問は、スレッドAはいつ破壊されるのですか?doSomeLenghtyOperation()は完了まで実行できますか?
スレッドAを指す参照がないため、ガベージコレクションの候補としてマークされますか?
- 「newThread()。Start()」ステートメント自体が終了した直後?
- 「if(true)」スコープが終了した直後?
- doSomeLengthOperation()が実行されて終了した後?
- 一度もない?
私が見るすべての例は、参照を保持しているMain()と、終了する前にスレッドAとの結合を待機しているメインスレッドです。上記のコードの存続期間が何であるか興味があります。
前もって感謝します!
windows - VBScript でのオブジェクトの破棄の順序は?
.vbs 内のオブジェクトはどのような順序で破棄されますか?
つまり、次のグローバルが与えられます。
次のいずれかに対する回答に興味があります。
.VBS に実装されているクラスのインスタンスは、どのような順序
Class_Terminate
で呼び出されますか? 大雑把な突っ込みは、作成の順序 (逆順ではありません!) を示唆していますが、これは保証されていますか?編集
Class_Terminate
:オブジェクトへの最後の最後の参照が解放されたときに呼び出されることを理解しています。つまり、x と y はどのような順序でリリースされ、それは保証されるのでしょうか? 簡単にするために、x と y がそれぞれのオブジェクトへの唯一の参照であると仮定します。オブジェクトのタイプは重要ですか? たとえば、.VBS にクラスを実装し、
Scripting.FileSystemObject
.編集: COM ライブラリは、スクリプト ホスト エンジンが何も知らない独自の内部循環参照を設定する可能性があることを理解しています。最初の質問への回答に何が影響するかを調べることに興味があります。
x と y がグローバルではなく Sub または Function に対してローカルである場合、上記の答えは異なりますか?
出口が通常か、例外によるか、または経由かによって異なります
WScript.Quit
か? (後者の場合、Class_Terminate
は終了する前にまだ未処理のオブジェクトに対して呼び出されているように見えますが、エラーが報告される可能性があります)。WScript オブジェクトはいつ破棄されますか?
スクリプトのホストは重要ですか? (wscript.exe 対 cscript.exe 対 Web ホスト エンジンの名前)
JScript のオブジェクト破棄モデルは VBScript のものとは異なりますか?
これらの質問のいくつかに対する答えは経験的に見つけることができますが、それらのいずれかが保証/文書化されているかどうかに興味があります.
回答の一部しか知らない場合でも投稿してください。またはさらに関連する問題があります。
wcf - WCFサービスのライフサイクルについての参照はありますか?
クライアントが番号を取得するために呼び出す単純なWCFアプリケーションがあるとします。その中にはあまり処理がなく、サービスコントラクトはSessionMode=SessionMode.NotAllowedとして属性付けられています。
コンストラクターはいつ呼び出されますか?オブジェクトはいつ破壊されますか?コンストラクターはリクエストごとに呼び出されますか?
この情報を含む参照ドキュメントまたはリソースはありますか?見つからないようです。
memcached - Memcached アイテムの有効期間を取得せずに延長するには?
実際に取得せずに Memcached アイテムの有効期間を延長できますか?
確かに、アイテムを手に入れて、もう一度セットして寿命を延ばすことができます。ただし、この方法では、最初にオブジェクトをスクリプトのメモリにコピーする必要があります。これは、パフォーマンスの観点からは良くありません。
android - Android-onDestroyは、アクティビティとその変数を破棄し、メモリを解放することになっています
コードにバグがあり、Androidのライフサイクルを完全に理解していないと思いました。はい、私はすべてのドキュメントを読み、図を見ましたが、アクティビティがフォーカスを失ったり、殺されたりする可能性がある場合、データを保存するタイミングについてのみ話しているようです。ただし、私の質問は、状態を保存する必要がない場合、変数とその格納された値はどうなりますか?私はそれらが破壊されることを期待していましたが、私のコードのバグはそうではないことを示しているようです。
私の場合、ここで何が起こったのかです。カスタムビューを起動するアクティビティがあります(xmlは使用せず、カスタムビューの画面にビットマップを描画するだけです)。私が現在アクティビティに持っている唯一の変数は、私のビューの変数です。GameView gameView;
私の見解では、いくつかのビットマップ、描画およびタッチイベントを処理するための単純なintおよびfloat変数を宣言し、小さなビットマップ、各オブジェクトの座標、およびその他のいくつかを含むオブジェクトの1つの配列があります。このオブジェクトのクラスの変数の1つは、オブジェクトの数の現在の数を表す静的変数です。私はこの方法でそれを行ったので、オブジェクトのインスタンス化により、オブジェクトのクラスの外でこれを追跡するのではなく、オブジェクトがどのように人間のオブジェクトであるかを追跡します。
静的変数はすべてのオブジェクトで同じ値を維持することを期待していましたが、onDestroyedがそのアクティビティに対して呼び出されると、この変数が他のすべての変数およびそのアクティビティのビューのオブジェクトとともに破棄されることも期待していました。しかし、それは起こらないようです。このアクティビティが再度起動されると、onDestroyedが呼び出された場合でも、この静的変数には前回の実行からの以前の値が含まれます。
今私の質問はこれを修正する方法ではありません(このバグを修正するために別の方法でコードを書くことができます)が、アプリケーション全体に対してグローバルではなく、内部にのみ存在するため、この静的変数でこれが発生する理由を理解したいと思いますそのアクティビティのビュー?また、これにより、そのビューの残りの変数について疑問に思います-それらは破壊されてメモリが解放されますか、少なくとも次にアクティビティが呼び出されたときにそれらの値は使用できなくなりますか、それとも自分でこれを行う必要がありますか?この状態データを保存する必要はありませんでしたか?
これについての洞察に感謝します。
iphone - Objective-cで変数を解放する正しい方法
Objective-cには、次のような変数を宣言する非常に簡単な方法があることを私は知っています。
このようにして、変数を保持しながら、self.myArrayをセッターとゲッターの両方として使用できます。ただし、これにより、もう1つ実行できるようになります。これは、deallocの使用を回避することです。私が理解している限り、この2つの行は同じです。
私の質問は、どちらが好ましい方法ですか?一方が機能し、もう一方が機能しない場合はありますか?
編集:申し訳ありませんが、私はリリースを意味し、deallocではありません...
c++ - 多重継承中に「横向き」に dynamic_cast できないのはなぜですか?
次のコードは std::bad_cast をスローします
正しく評価するために「完全な継承格子をトラバースする」ため、dynamic_cast に実装パフォーマンスのトレードオフがあることを読んだことを覚えています。ここでコンパイラが行う必要があるのは、最初にキャストアップしてから再度キャストダウンすることです。
上記の作業を行うことは可能ですか、それとも追加する必要があり
virtual Foo* Bar::as_foo()=0;
ますか?