Другой вариант, чем словарь

Я сделал программу, которая по своей сути является клавиатурным крючком. Я нажимаю определенную кнопку, и она выполняет определенное действие. Поскольку существует довольно большой список опций, которые я могу выбрать с помощью Combobox, я решил создать словарь под названием ECCMDS (расшифровывается как команды встроенного контроллера). Затем я могу установить для своих элементов Combobox значение ECCMDS.Keys и выбрать команду по имени. Это облегчает сохранение, потому что это строка, которую я просто сохраняю в файл XML. Ну программа контролирует где-то 4-8 кнопок. Проблема исходит от времени выполнения. Программа использует около 53 мегабайт памяти (разумеется, я смотрю на нее сейчас и там написано 16 мегабайт:/) Ну, на планшете, на котором он работает, есть 3 Гб памяти и процессор Atom. Обычно я смеялся над 53 мегами, но использовал огромный оператор switch, и программа использует около 2 или 3 мег (когда-то, когда я действительно смотрел на его использование, поэтому я точно не помню)

Поэтому, хотя Dictionary значительно уменьшает сложность моего метода RunCommand, мне интересно об использовании памяти. Этот планшет в режиме ожидания использует 80% своей памяти, поэтому я бы хотел как можно меньше повлиять на это. Есть ли другое решение этой проблемы? Вот небольшой пример словаря

        ECCMDS = new Dictionary<string, Action>()
        {
            {"Decrease Backlight", EC.DescreaseBrightness},
            {"Increase Backlight", EC.IncreaseBrightness},

            {"Toggle WiFi",  new Action(delegate{EC.WirelessState = GetToggledState(EC.WirelessState);})},
            {"Enable WiFi",  new Action(delegate{EC.WirelessState = ObjectState.Enabled;})},
            {"Disable WiFi", new Action(delegate{EC.WirelessState = ObjectState.Disabled;})},
            {"{PRINTSCRN}", new Action(delegate{VKeys.User32Input.DoPressRawKey(0x2C);})},
        };

Можно ли использовать отражение или что-то для этого?

РЕДАКТИРОВАТЬ

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

Main Entry Point:32356 kb

Before Huge Dictionary:33724 kb
After Initialization:35732 kb
After 10000 runs:37824 kb
That took 932ms to run
After Huge Dictionary:38444 kb

Before Huge Switch Statement:39060 kb
After Initialization:39696 kb
After 10000 runs:40076 kb
That took 1136ms to run
After Huge Switch Statement:40388 kb

1 ответ

Решение

Я предлагаю вам извлечь Dictonary из отдельной программы и посмотреть, сколько места он занимает, прежде чем беспокоиться о том, сколько места он занимает, и если это ваша проблема.

Другие вопросы по тегам