我有一个庞大的unique_ptr矢量。
当我需要做clear()或者调用析构函数时,需要4-5秒。
一种理论上加速它的方法是创建临时向量,将其与我工作的巨大向量交换,然后启动一个线程并在临时向量上调用clear。
当我在互联网上看的时候,我没有看到任何人这样谈论优化。
我的优化有缺陷吗?
发布于 2017-08-05 17:55:02
我想你的想法应该行得通。例如,如果您有一个名为X的数据的std::vector
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(),这样主线程在执行清除操作时不会挂起。
https://stackoverflow.com/questions/45520354
复制相似问题