我做了一个程序,它的核心是一个键盘钩子。我按下一个特定的按钮,它会执行一个特定的动作。由于我可以使用组合框选择相当多的选项列表,因此我决定制作一个名为 ECCMDS 的字典(代表嵌入式控制器命令)。然后我可以将我的 Combobox 项目设置为 ECCMDS.Keys 并按名称通过命令进行选择。也便于保存,因为它是一个字符串,我只是将它保存到 XML 文件中。好吧,该程序可以监视 4-8 个按钮。问题来自运行时。该程序使用大约 53 兆内存(当然我现在查看它,它说 16 兆:/) 运行它的平板电脑有 3 Gb 的内存和一个 Atom 处理器。通常我会嘲笑53megs,
因此,尽管 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