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