Другой вариант, чем словарь
Я сделал программу, которая по своей сути является клавиатурным крючком. Я нажимаю определенную кнопку, и она выполняет определенное действие. Поскольку существует довольно большой список опций, которые я могу выбрать с помощью 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 из отдельной программы и посмотреть, сколько места он занимает, прежде чем беспокоиться о том, сколько места он занимает, и если это ваша проблема.