Производительность изменения цветов Visual Studio с помощью пользовательской надстройки - PullRequest
4 голосов
/ 07 апреля 2011

Я создаю надстройку для Visual Studio 2008, которая позволит мне переключаться между цветовыми схемами с помощью горячей клавиши.

Я получил ее, чтобы успешно загрузить цветовую схему и применить ее, но она оченьмедленно.

Вот код, который применяет схему:

// The Theme class is a holder for a color scheme
private static void LoadTheme(Theme theme, DTE2 application)
{
    var items = GetItems(application);

    foreach (var item in items)
    {
        if (!theme.Properties.ContainsKey(item.Name)) continue;

        var prop = theme.Properties[item.Name];

        item.Background = prop.Background;
        item.Foreground = prop.Foreground;
        item.Bold = prop.Bold;
    }
}

private static IEnumerable<ColorableItems> GetItems(DTE2 application)
{
    var fontsAndColorsItems = (FontsAndColorsItems) application
                                                        .get_Properties("FontsAndColors", "TextEditor")
                                                        .Item("FontsAndColorsItems")
                                                        .Object;

    return fontsAndColorsItems.Cast<ColorableItems>();
}

По сути, GetItems получает список ColorableItems из параметров Visual Studio.Установка свойства для одного из этих элементов немедленно применяет изменение к VS.Так как цветовая схема может содержать более ста свойств, это приводит к 300+ операциям обновления, и это занимает очень много времени (10+ секунд на моем ноутбуке).

Я хотел бы как-то сказать VS, что яне хочу, чтобы он обновлялся, пока я обновляю свойства, и когда я закончу, скажите, чтобы он обновлялся, но я не могу найти способ сделать это.

В идеале весь процесс занял бы 1или 2 секунды, аналогично запуску параметров импорта / экспорта с помощью мастера VS.

Я также открыт для альтернативных подходов.У меня была идея просто перезаписать настройки реестра, но затем мне нужен способ заставить VS перезагрузить его настройки.

1 Ответ

3 голосов
/ 08 апреля 2011

Ну, я нашел решение, которое работает очень хорошо. Я могу просто вызвать фактическую функциональность настроек импорта / экспорта в Visual Studio, например:

application.ExecuteCommand(
    "Tools.ImportandExportSettings", 
    string.Format("/import:\"{0}\"", file));

Где file - полный путь к файлу vssettings. Это работает примерно за 1 секунду.

Это потребует некоторых изменений в работе моей надстройки, но на самом деле это проще.

...