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

How to drag & drop lots of files without taxing system resources?

本文关键字:拖放 情况下 放大 文件 系统资源      更新时间:2023-10-16

我正在开发的程序的功能之一是能够将对象从主窗口拖出并以文件的形式放到Windows资源管理器中。

为此,我们重写COleDataSource::OnRenderGlobalData(),当格式为CF_HDROP时,我们将每个对象保存为文件。当对象数量较少时,这种方法可以很好地工作。

然而,由于我们现在正致力于支持企业级数量的对象,当用户试图将大量对象从我们的应用程序拖到Windows资源管理器中时,我们看到了很大的延迟,有时会导致挂起或最终崩溃。

我猜发生这种情况是因为OnRenderGlobalData()被调用了很多次,当然,每次它都要循环遍历被拖动的对象并将它们保存为文件。

我正在研究重写OnRenderFileData()的想法,但是这样做的问题是它一次只处理一个文件。

是否有任何方法,我可以加快我们的应用程序,当用户试图拖动很多对象到Windows资源管理器,最好是通过移动保存循环的地方,它可以只执行一次,当实际下降发生?

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

我有同样的问题。我的"解决方案"不是很聪明。我提供拖放功能是为了方便少数对象。如果用户选择的对象超过了可以很好地处理的对象数量,则禁用拖放功能,用户必须从文件夹浏览器对话框中选择目标。当选择目标时,对象将作为文件写入那里,并带有进度指示器。