【问题标题】:ACE/TAO Performance IssueACE/TAO 性能问题
【发布时间】:2015-01-28 20:29:17
【问题描述】:

ACE/TAO length() 函数占用了太多时间。因为它在设置长度时使用 new 运算符创建了那么多内存。任何人都知道仅在 TAO 中设置长度的替代长度函数。

谢谢,

【问题讨论】:

  • 您的详细信息似乎与您的问题标题不匹配

标签: c++ corba tao


【解决方案1】:

来自 ATCD 邮件列表中的 Will Otte: 我猜你有这样的代码:

while (something) {
    CORBA::ULong pos = seq.length ();
    seq.length (pos+1);
    seq[pos] = some_value;
}

并观察到与

相比,性能相当糟糕
std::vector<foo> vec;
while (something) {
    size_t pos = vec.size ();
    vec.resize (pos + 1);
    vec[pos] = foo (bar);  // or the much more succinct vec.push_back (foo (bar));
}

对吗?

答案很可能是因为您的 STL 实现在您使用调整大小时可以帮助您并提供几何增长。 C++ 标准没有任何类似的要求(对于调整大小;push_back 保证以几何级数增长),所以你可能很幸运,不应该依赖这种行为。

TAO 序列不为您提供此功能,因此如果您反复调整大小,您会发现性能很差,因为每次调整大小时,您都必须为分配新缓冲区和是时候将所有现有元素复制到新的底层缓冲区了。

【讨论】:

  • 是的,没错...我使用了一个技巧来解决性能问题:seq.length(max_possible_length); // 第一手设置最大长度消除了循环内调整大小的性能开销。而(某物){ pos+1; seq.length (pos); seq[pos] = some_value; }
猜你喜欢
  • 1970-01-01
  • 2014-08-08
  • 2020-09-24
  • 2017-03-16
  • 2018-06-04
  • 1970-01-01
  • 2023-03-11
  • 2022-05-03
  • 2011-03-02
相关资源
最近更新 更多