C# Почему Shell32.Ракушка.Windows() так медленно?

#c# #powershell #shell32

Вопрос:

Когда я пытаюсь выполнить итерацию окон проводника файлов на C#.

Для выполнения метода Windows требуется 7-15 секунд.

В powershell это занимает меньше секунды.

Что вызывает такую длительную задержку?

         Shell32.Shell o = new Shell32.Shell();

        // This takes 7 - 15 seconds to execute
        dynamic allWindows = o.Windows();

        for (int i = 0; i < allWindows.count; i  )
        {
            dynamic item = allWindows[i];

            string location = item.LocationURL as string;

            Console.log("Full path", location);
        }
 

Редактировать:
После дополнительных испытаний. Я обнаружил, что длинный вызов происходит, когда я запускаю это в protected override void OnStartup(StartupEventArgs e) своем приложении WPF.

Однако у него не будет такой большой задержки, если я вызову его в потоке STA, который запускается через 5 секунд после запуска приложения.

Комментарии:

1. Что же Shell32 это такое , собственно говоря? Какая библиотека/пространство имен?

2. Кроме того, почему вы используете dynamic то, что кажется строго типизированной библиотекой?

3. Библиотека Элементов Управления И Автоматизации Microsoft Shell. Он возвращает com — объект с динамическими элементами.

4. Монитор процессов (ProcMon) может выявить причину замедления. Я подозреваю, что это может быть связано с запуском Internet Explorer. Можете ли вы опубликовать свой код PowerShell для целей сравнения?