如何在不占用系统资源的情况下拖放大量文件?
How to drag & drop lots of files without taxing system resources?
我正在开发的程序的功能之一是能够将对象从主窗口拖出并以文件的形式放到Windows资源管理器中。
为此,我们重写COleDataSource::OnRenderGlobalData()
,当格式为CF_HDROP
时,我们将每个对象保存为文件。当对象数量较少时,这种方法可以很好地工作。
然而,由于我们现在正致力于支持企业级数量的对象,当用户试图将大量对象从我们的应用程序拖到Windows资源管理器中时,我们看到了很大的延迟,有时会导致挂起或最终崩溃。
我猜发生这种情况是因为OnRenderGlobalData()
被调用了很多次,当然,每次它都要循环遍历被拖动的对象并将它们保存为文件。
我正在研究重写OnRenderFileData()
的想法,但是这样做的问题是它一次只处理一个文件。
是否有任何方法,我可以加快我们的应用程序,当用户试图拖动很多对象到Windows资源管理器,最好是通过移动保存循环的地方,它可以只执行一次,当实际下降发生?
不创建文件,而是拖动在删除时生成的虚拟数据。提供CFSTR_FILEGROUPDESCRIPTOR和CFSTR_FILECONTENTS。下面是一个例子
我有同样的问题。我的"解决方案"不是很聪明。我提供拖放功能是为了方便少数对象。如果用户选择的对象超过了可以很好地处理的对象数量,则禁用拖放功能,用户必须从文件夹浏览器对话框中选择目标。当选择目标时,对象将作为文件写入那里,并带有进度指示器。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 如何在不复制此代码的情况下将多个函数放入多个命名空间?
- 如何在不复制的情况下将 std::string 的一部分放入 streambuf 中
- 问题:只有在没有拖放的情况下才接受mouseRelease
- 如何在不将glew32.dll放入系统根目录的情况下包含它
- 如何在不把内部类的定义放入父类的情况下创建一个内部类
- 在不改变精灵位置的情况下缩放资产
- 如何在不占用系统资源的情况下拖放大量文件?