問題タブ [object-pooling]

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.

0 投票する
1 に答える
556 参照

android - Android FrameLayout オブジェクトを「クリーン」状態にリセットします

独自の Android ビューのリサイクルを実装しようとしています。私の質問は、Android View オブジェクト (より具体的には FrameLayout) をコンストラクターから出てくる状態に「リセット」する簡単な方法があるかどうかです。つまり、コンテキストは認識していますが、SetWillNotDraw の呼び出し、タッチ ハンドラー、可視性など、私が設定した可能性のあるものはすべて忘れています。

別の方法は、独自の「リセット」メソッドを作成することです。私がそのルートに行くと、状態の一部をリセットできないことに関連するバグが発生するのではないかと心配しています。

0 投票する
1 に答える
55 参照

android - Android ビュー オブジェクトのリサイクル時のアーティファクト

パフォーマンスを向上させるために、ビュー オブジェクトのリサイクルを Android アプリに導入しています。それはそれで役立ちます。しかし、新しい画面が表示されると、ビューの以前の状態に関連していると思われる短いアーティファクトが表示されます。アーティファクトは、あるべきではない色の長方形の領域の形を取ります。アプリは非常に迅速に正しい状態に調整されますが、それでも煩わしいです。これを防ぐ方法はないか考え中です。私が現在行っていることは、階層から古いビューを削除し、そのイベント ハンドラーの設定を解除することです。明らかに、それだけでは十分ではありません。LayoutParams は通常、ビューをその親に関連付けます。おそらく、ビューを削除するときに、何らかの方法でビューを「レイアウト解除」する必要がありますか? しかし、私はそれを行う方法がわかりません。

0 投票する
5 に答える
418 参照

c# - Android ビュー オブジェクトの再利用 -- ビューが再表示されたときに古いサイズが表示されないようにする

編集:関連する可能性のある情報のもう1つの部分:問題が発生するユースケースは、タブの切り替えです。つまり、タブ A にビュー X を作成し、タブ A を離れるときにビュー X を削除し、タブ B に再利用します。そのときに問題が発生します。これはまさに、パフォーマンスの向上が必要なときでもあります。. .

Android アプリのパフォーマンスに取り組んでいます。MyLayout と呼ぶクラスの View オブジェクトを再利用することで、作業を高速化できることに気付きました。(これは実際にはカスタムの FrameLayout サブクラスですが、それはおそらく問題ではありません。また、これは ListView 関連ではありません。)つまり、ビューを使い終わったら、GC に取得させるのではなく、プール。同じアクティビティが別の MyLayout オブジェクトを必要とする場合、利用可能な場合はプールから 1 つ取得します。これにより、実際にアプリが高速化されます。しかし、古いサイズ情報をクリアするのに苦労しています。その結果、ビューを元に戻すと、通常は問題ありませんが、場合によっては、新しいビューが新しいサイズ情報でレイアウトされる前に一時的に表示されます。これは、ビューを階層に戻す直前または直後に新しい LayoutParams を設定しても発生します (両方の方法を試しましたが、どちらも役に立ちません)。したがって、ユーザーは、正しいサイズになる前に、古いサイズの短い (おそらく 100 ミリ秒) フラッシュが表示されます。

これを回避できるかどうか、またはどのように回避できるか疑問に思っています。以下は、C#/Xamarin を介して、私が試したいくつかのことですが、どれも役に立ちません。

リサイクル時:

戻す直前または直後 -- レイアウトを新しい親に追加する同じイベント ループ内:

また、以下のように元に戻そうとしましたが、問題はまだ残っています:

編集:リクエストごとに、私が試したシーケンスのいくつか。すべて同じ問題に苦しんでいます。基本的な問題は、LayoutParams が正しくても、実際のレイアウトがまだ行われていないため、レイアウト自体が正しくないことです。

リサイクル時間:

試行 A:

試行 B:

ビューを追加し直す場合:

すべての試行で、次のサブルーチンのいずれかを呼び出して、LayoutParams をモデルに同期します。

試行 A:

試行 B: A と同じですが、順序が逆です。

試行 C: A と同じですが、新しい layoutParams を使用します。

試行 D: B と同じですが、新しい layoutParams を使用します:

試行 E: layoutParams 引数を取る AddView を使用します。

5 つのケースすべてにおいて、問題は、layoutParams が正しい場合でも、レイアウトが新しい layoutParams に合わせて調整される前に、ビューがユーザーに表示されることです。

0 投票する
1 に答える
988 参照

object - シングルトン クラスとオブジェクト プーリング

ステートレスオブジェクトの場合、シングルトンクラスを作成するか、オブジェクトプールを作成するか、どちらを使用する必要がありますか。オブジェクトプーリングとシングルトンクラスの違いはどこにありますか? それらを互いに選択できる条件は何ですか?

ステートレス オブジェクトのみを考慮してください 。

0 投票する
0 に答える
2887 参照

unity3d - Unity でのスクロール リストの最適化

私はUnityを初めて使用します。UnityでGUIを作っていて、スクロールリストに困っています。リストアイテムのプレハブがあります。また、サーバーから約 100 アイテムのデータを取得し、リストに保存します。ここで、データが通常どおりスクロール ビューに取り込まれた場合、スクロール ビューのリスト アイテム プレハブの 100 インスタンスをインスタンス化する必要があり、これによりアプリのパフォーマンスが大幅に低下します。私はインターネットで読んで、オブジェクトプーリングを使用してそれを処理し、各リスト項目の OnBecameVisible/OnBecameInvisible のイベントをキャッチする手法があることを知っています。しかし、実際には、私にとって明確に説明できる例はありません。

特に OnBecameVisible が呼び出されたときに、誰でもこれを解決するのを手伝ってくれますか???

0 投票する
3 に答える
3761 参照

c++ - shared_ptr のオブジェクト プール パターンは可能ですか?

shared_ptr のオブジェクト プールを作成することはできますか? これを頭の中でスケッチすると、これを行う 2 つの方法がわかりますが、それぞれに欠点があります。

  1. T 個のオブジェクトが再利用可能なプールに格納されている場合、get() 要求で T を shared_ptr にラップすると、制御ブロックが毎回ヒープに再割り当てされることになり、オブジェクト プールの概念が壊れます。

  2. shared_ptr オブジェクトが再利用可能なプールに格納されている場合、shared_ptr オブジェクトは、カスタム デリーターを開始するために存在を停止する必要があり、カスタム デリーター関数は T ポインターでのみ呼び出されます。したがって、リサイクルするものは何もありません。

0 投票する
1 に答える
521 参照

cocos2d-x - Cocos2d-x オブジェクト プーリング

以下のようにオブジェクトプールを作成しました。

プールからオブジェクトをプルしようとすると、cocos でこのエラーが発生します。{return static_cast<size_type>(this->__end_ - this->__begin_);}

私のオブジェクトプル方法は次のとおりです。