如何在不增加系统资源的情况下拖放大量文件?

Rob*_*obH 6 c++ windows mfc drag-and-drop

我正在处理的程序的一个功能是能够从主窗口拖动对象并将它们作为文件拖放到Windows资源管理器中.

为此,我们覆盖COleDataSource::OnRenderGlobalData(),当格式为时CF_HDROP,我们将每个对象保存为文件.当对象数量很小时,这可以正常工作.

但是,当我们正在努力支持企业级别的对象时,当用户尝试将大量对象从我们的应用程序拖到Windows资源管理器中时,我们会看到很大的延迟,有时会导致挂起或最终崩溃.

我的猜测是这种情况正在发生,因为OnRenderGlobalData()它被调用了很多次,当然,每次它必须遍历被拖动的对象并将它们保存为文件.

我正在研究覆盖的想法OnRenderFileData(),但问题是它一次只处理一个文件.

当用户试图将大量对象拖到Windows资源管理器上时,有什么方法可以加快我们的应用程序,最好是将保存循环移动到只能在实际放置时执行一次的地方?

Ray*_*hen 5

拖动而不是创建文件,拖动在删除时生成的虚拟数据.提供CFSTR_FILEGROUPDESCRIPTOR和CFSTR_FILECONTENTS.这是一个例子.