调用向量析构函数或在其他线程中清除

缺口

我有unique_ptr的巨大向量。

当我需要执行clear()或调用析构函数时,它花了4-5秒。

加快速度的一种理论方法是创建临时向量,将其与我工作的巨大向量交换,然后启动线程并在临时向量上调用clear。

在浏览互联网时,我看不到有人在说这样的优化。

我的优化有缺陷吗?

埃德加·洛克詹(EdgarRokjān)

我想你的主意应该行得通。例如,如果您有std::vector一些名为的数据X

struct X
{
    // some data here
};

using DataStorage = std::vector<std::unique_ptr<X>>;

您可能会使用std::async移动DataStorage对象并clear()异步调用此对象的方法:

DataStorage data;

// data usage

auto clear_task = std::async(std::launch::async,
    &DataStorage::clear, std::move(data));

// do some stuff here; data object is not used anymore

clear_task.wait();

这里没有不必要的复制:您只需移动data并指定要clear()在单独的线程中调用,以使执行清除操作时主线程不会挂起。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章