В моей библиотеке "Записанное ТВ", в которой я храню фильмы, которые Windows Media Center записывает с моей карты ТВ-тюнера, у меня есть около 400 фильмов (файлы .dvr-ms и .wtv), почти 2,4 ТБ данных. Когда я пытаюсь открыть эту папку в Windows Explorer, использование оперативной памяти достигает 100%, и весь компьютер зависает, пока мне не удастся закрыть папку, так или иначе. (Что является настоящим подвигом, поскольку Windows 7 обычно очень стабильна.)

Это известная ошибка с известным решением? Это не имеет большого значения, так как я все еще могу управлять файлами из Windows Media Center или с помощью командной строки, но это раздражает. Действительно, иногда я хочу посмотреть метаданные, связанные с фильмом, без запуска Media Center. Конечно, я могу написать небольшое Win32-приложение под названием ShellExecuteEx с глаголом properties , но это «излишне», не так ли?

Конечно, в 2013 году Windows Explorer может открыть каталог с несколькими сотнями файлов в нем?

2 ответа2

1

В зависимости от количества файлов, количества извлекаемых метаданных, от того, насколько хорошо закодировано расширение оболочки (независимо от того, является ли оно многопоточным или нет, имеет ли утечки памяти и т.д.), Сколько свободной памяти имеется и т.д., включение режима просмотра эскизов в проводнике или включение отображения нескольких столбцов, требующих извлечения метаданных из каждого файла, может привести к сбою системы.

Оптимизация папки для общих элементов (через folder Properties / Customize tab) - это один из способов обеспечения разумного отклика Explorer даже при наличии сотен или тысяч файлов в папке.

1

Частичный обходной путь - обеспечить доступ ко всем необходимым функциям через командную строку. Например, я написал эту простую программу на 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 в командной строке, чтобы показать его диалоговое окно свойств.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .