我做了一个程序,它的核心是一个键盘挂钩。我按下一个特定的按钮,它执行一个特定的动作。由于我可以从Combobox中选择一个相当大的选项列表,所以我决定编写一个名为ECCMDS的字典(表示嵌入式控制器命令)。然后,我可以将组合框项设置为ECCMDS.Keys,并通过命令按名称进行选择。这样也很容易保存,因为它是一个字符串,我只是将它保存到一个XML文件中。这个程序监控从4-8个按钮到任何地方。问题来自运行时。这个程序使用了大约53兆内存(当然,我现在看了一下,它说是16兆),这个运行在上面的平板电脑有3GB的内存和一个Atom处理器。通常,我会嘲笑53 megs,但是使用一个巨大的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发布于 2013-10-10 22:22:29
我建议你把字典提取到一个单独的程序中,在你担心它占用了多少空间之前,先看看它占用了多少空间,如果这是你的问题。
https://stackoverflow.com/questions/19302379
复制相似问题