我有很多unique_ptr的载体。
当我需要执行clear()或调用析构函数时,需要4-5秒。
加速它的一种理论方法是创建临时向量,将其与我工作的巨大向量交换,然后启动一个线程并在临时向量上调用clear。
在互联网上查看时,我没有看到有人说这样的优化。
我的优化中是否存在缺陷?
答案 0 :(得分:1)
我猜你的想法应该有效。例如,如果您有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()
,以便在执行清除操作时主线程不会挂起。