在我的“录制的电视”库中,我存储了 Windows Media Center 从我的电视调谐卡录制的电影,其中有大约 400 部电影(.dvr-ms 和 .wtv 文件),几乎有 2.4 TB 的数据。当我尝试在 Windows 资源管理器中打开此文件夹时,RAM 使用率达到 100%,整个计算机都冻结了,直到我最终设法关闭该文件夹(不管怎样)。(这很了不起,因为 Windows 7 通常非常稳定。)
这是一个已知的错误,有已知的解决方案吗?这不是什么大问题,因为我仍然可以从 Windows Media Center 中管理文件,或者使用命令提示符,但这很烦人。事实上,有时我想在不启动 Media Center 的情况下观看与电影相关的元数据。当然,我可以编写一个小型 Win32 应用程序来调用ShellExecuteEx
用properties
动词,但这样就太“过头”了,不是吗?
当然,在 2013 年,Windows 资源管理器可以打开一个包含几百个文件的目录吗?
答案1
根据文件的数量、要提取的元数据量、shell 扩展的编码情况(是否正确地多线程、是否有内存泄漏等)、有多少可用 RAM 等等,在资源管理器中打开缩略图视图或启用需要从每个文件提取元数据的多列显示可能会使系统陷入困境。
优化文件夹一般物品(通过folder Properties / Customize tab
) 是确保即使文件夹中有数百或数千个文件,Explorer 也能保持合理响应的一种方法。
答案2
部分解决方法是确保可以通过命令提示符访问所需的所有功能。例如,我编写了这个简单的 Delphi 程序(并将 EXE 放在System32
文件夹中):
program shprop;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows,
ShellAPI;
const
SEE_MASK_NOASYNC = $100;
var
shi: TShellExecuteInfo;
begin
try
if ParamCount = 0 then Exit;
FillChar(shi, sizeof(shi), 0);
shi.cbSize := sizeof(shi);
shi.lpFile := PChar(ParamStr(1));
shi.lpVerb := 'properties';
shi.fMask := SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI
or SEE_MASK_NOASYNC or SEE_MASK_NOCLOSEPROCESS;
if ShellExecuteEx(@shi) then
begin
Writeln('Press Return to continue.');
Readln;
end
else
Writeln(SysErrorMessage(GetLastError));
except
on E: Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
现在我只需shprop myfile.wtv
在命令提示符中写入即可显示其属性对话框。