【问题标题】:Which object pool backing store to choose?选择哪个对象池后备存储?
【发布时间】:2010-10-13 15:32:04
【问题描述】:

在我们的 C# (.NET 4.0) 应用程序中,我们以不同大小的块分配和取消分配 大量 内存。我们想迁移到对象池,以提高性能。

我们已经实现了一个对象池,并且看到了一些性能改进。我们目前正在使用基于堆栈的后备存储。其他可能的替代方案是基于队列的存储、基于 ConcurrentBag 的存储、基于列表 的存储等。

我猜后备存储的选择实际上取决于应用程序的特性,所以我们现在正在使用所有这些不同的后备存储实现对象池并测试性能。

但是,我真的很想听听您对对象池的不同后备存储的优缺点的看法。

谢谢

【问题讨论】:

    标签: c# memory-management .net-4.0 object-pooling memory-pool


    【解决方案1】:

    目前还没有这个问题的答案,所以我会写下我自己的答案:

    最终使用了堆栈。归功于:http://geekswithblogs.net/robp/archive/2008/08/07/speedy-c-part-2-optimizing-memory-allocations---pooling-and.aspx

    我们刚刚尝试了不同的后备存储,结果 Stack 在我们的特定情况下是最快的。

    【讨论】:

    • 你从来没有说明你正在汇集什么样的对象。引用类型还是值类型?这有很大的不同
    • @MattDavey:它们是可变大小的字节数组。
    • 我不认为这是你正在汇集的东西(嗯 - 过去的价值与引用类型),而不是访问模式。在高度并发的代码中,对象池的实现将是绝对糟糕的,因为它锁定了 get/return 方法。
    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 2018-11-24
    • 2017-04-13
    • 2014-02-24
    • 1970-01-01
    • 2014-02-28
    • 2015-07-05
    相关资源
    最近更新 更多