问题标签 [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.
android - 将 Android FrameLayout 对象重置为“干净”状态
我正在尝试实现我自己的 Android 视图回收。我的问题是,有没有一种简单的方法可以将 Android View 对象(更具体地说,一个 FrameLayout)“重置”到它从构造函数中出来的状态。换句话说,它知道它的上下文,但它忘记了诸如调用 SetWillNotDraw、触摸处理程序、可见性或我可能在其上设置的任何其他内容。
另一种方法是编写我自己的“重置”方法。我担心如果我走这条路,我最终会遇到与未能重置状态的某些部分有关的错误。
android - 回收 Android 视图对象时的工件
我将视图对象回收引入我的 Android 应用程序以提高性能。它确实对此有所帮助。但是当出现一个新屏幕时,我会看到一些我认为与视图的先前状态有关的简短工件。文物采取某种颜色的矩形区域的形式,不应该在那里。该应用程序会很快自行调整到正确的状态,但仍然很烦人。我想知道是否有办法防止这种情况。我目前正在做的是从层次结构中删除旧视图并取消设置其事件处理程序。显然,这还不够。LayoutParams 通常将视图与其父级相关联;也许我需要在移除视图时以某种方式“取消布局”视图?但我不知道该怎么做。
c# - Android 视图对象重用——防止视图重新出现时显示旧尺寸
编辑:还有一条可能相关的信息:我看到问题的用例是选项卡切换。也就是说,我在选项卡 A 上创建视图 X,离开选项卡 A 时将其删除,然后将其回收到选项卡 B。这就是问题发生的时候。这也正是我需要性能提升的时候。. .
我正在研究我的 Android 应用程序的性能。我注意到我可以通过重用我们将称为 MyLayout 的类的 View 对象来加快速度。(它实际上是一个自定义 FrameLayout 子类,但这可能无关紧要。此外,这与 ListView 无关。)也就是说,当我完成一个 View 时,而不是让 GC 得到它,我把它放入一个水池。当同一个活动需要另一个 MyLayout 对象时,我会从池中抓取一个(如果有)。这确实加速了应用程序。但是我很难清除旧的尺寸信息。结果是,当我拿回 View 时,通常一切都很好,但在某些情况下,新 View 在使用新的尺寸信息布局之前会短暂出现。即使我在将视图添加回层次结构之前或之后不久设置了新的 LayoutParams,也会发生这种情况(我已经尝试了两种方法;都没有帮助)。因此,用户会看到旧尺寸的短暂(可能是 100 毫秒)闪烁,然后才会变为正确的尺寸。
我想知道我是否/如何解决这个问题。下面,通过 C#/Xamarin,是我尝试过的一些事情,但都没有帮助:
回收时:
在带回之前或之后——在将布局添加到其新父级的同一事件循环中:
我也试过像下面这样把它带回来,但问题仍然存在:
编辑:根据要求,我尝试过的一些序列。所有人都遭受同样的问题。基本问题是即使 LayoutParams 是正确的,但布局本身并不正确,因为实际布局尚未发生。
回收时间:
尝试A:
尝试 B:
重新添加视图时:
所有尝试都调用以下子例程之一以将 LayoutParams 同步到模型:
尝试A:
尝试 B:与 A 相同,但顺序相反:
尝试 C:与 A 相同,但使用新的 layoutParams:
尝试 D:与 B 相同,但使用新的 layoutParams:
尝试 E:使用带有 layoutParams 参数的 AddView:
在所有五种情况下,问题是即使 layoutParams 是正确的,在布局调整到新的 layoutParams 之前视图对用户可见。
object - 单例类与对象池
对于无状态对象我们应该使用哪一个,是为其创建单例类还是为其创建对象池。对象池和单例类的区别在哪里?我们可以选择它们而不是彼此的条件是什么?
只考虑 无状态对象。
unity3d - 优化 Unity 上的滚动列表
我对 Unity 很陌生。我在 Unity 上制作 GUI 并遇到滚动列表问题。我有一个列表项的预制件。此外,我从服务器获取大约 100 个项目的数据,保存在一个列表中。现在,如果像往常一样在滚动视图中填充数据,我将不得不为滚动视图实例化 100 个列表项预制实例,这将大大降低我的应用程序的性能。我在 Internet 上阅读并知道有一种技术可以处理该问题,使用对象池并捕获每个列表项的 OnBecameVisible/OnBecameInvisible 事件。但是,实际上没有任何例子可以为我解释清楚。
任何人都可以帮我解决这个问题,尤其是在调用 OnBecameVisible 时???
c++ - shared_ptr 的对象池模式是否可能?
是否可以创建 shared_ptr 的对象池?在我的脑海中画出这个草图,我可以看到两种方法,但每种方法都有一个缺陷:
如果 T 个对象存储在可重用池中,则在 get() 请求上将 T 包装在 shared_ptr 中的行为将导致每次在堆上重新分配控制块 - 因此打破了对象池的概念。
如果 shared_ptr 对象存储在可重用池中,则 shared_ptr 对象必须停止存在才能启动自定义删除器,并且自定义删除器函数仅使用 T 指针调用。所以没有什么可回收的。
java - 在 java 中使用 Apache commom pool 进行对象池化
这是我的java代码
运行时间比我预期的要长,我注意到这是由于为每个查询创建对象。所以我决定使用 Apache 公用池,但我陷入了困境。谁能帮我为 HiveContext 类型的对象创建一个池。但到目前为止我已经尝试过了
cocos2d-x - Cocos2d-x 对象池化
我创建了如下的对象池。
当我尝试从池中拉出对象时,cocos 给出了这个错误;{return static_cast<size_type>(this->__end_ - this->__begin_);}
我的对象拉取方法如下。
java - 我应该重用 DatagramPacket 吗?
我正在构建一个基于 UDP 的应用程序来接收和发送多个数据包。
我可以为每次发送构建一个新DatagramPacket
实例,或者在我的应用程序生命周期内回收一个实例。
- 重用 a 有什么好处
DatagramPacket
吗?(例如内存分配) - 有没有潜在的问题?(例如线程安全)
c# - c# 中的对象池,用于 asp.net、.Net 4.5.1 引用的 dll
我正在引用一个(黑匣子)dll,它的初始化非常昂贵(需要 3-4 秒)。它由具有数百个同时用户的 asp.net 应用程序使用。
由于昂贵的初始化,我不能将它用作实例变量。我的第一个想法是将实例存储在静态变量中,并使用 c# lock() 方法来避免竞争条件。这很好用,但是当多个用户想要同时访问该库时,围绕单个静态变量的 lock() 方法显然效率低下。
我想实现一个对象池,以便可以使用该库的多个实例。我不能使用 COM+。当池将由 asp.net 应用程序使用时,在 c#、.Net 4.5.1 中实现对象池的最佳方法是什么?
这篇 MSDN 文章有很多引用建议使用 ConcurrentBag,但很多人说这在单个线程从池中添加/删除项目时效果最好。在我的情况下,多个线程将添加/删除项目,所以这种方法似乎不适合 asp.net,但如果我说错了,请纠正我:https ://msdn.microsoft.com/ zh-CN/图书馆/ff458671(v=vs.110).aspx
我发现这个答案非常有用,但它已经过时了: C# Object Pooling Pattern implementation