我制作了一个程序,其核心是键盘钩子。我按下一个特定按钮,然后执行特定操作。由于我可以使用Combobox选择相当大的选项列表,因此我决定创建一个名为ECCMDS的字典(代表嵌入式控制器命令)。然后我可以将我的Combobox项目设置为ECCMDS.Keys并按名称选择命令。这样可以轻松保存,因为它只是将字符串保存到XML文件中。那么程序可以监控4-8个按钮。问题来自运行时。该程序使用大约53兆内存(当然我现在看它并且它说16兆:/)这个运行的平板电脑有3Gb的内存和Atom处理器。通常我会嘲笑53megs,但是使用一个巨大的switch语句,程序会使用大约2或3 megs(自从我实际查看它的用法以来,我已经记不起来了)
因此,虽然字典大大降低了我的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
答案 0 :(得分:1)
我建议您将词典提取到一个单独的程序,看看它占用了多少空间,然后再担心它占用了多少空间,以及这是否是您的问题。