1

我做了一个程序,它的核心是一个键盘钩子。我按下一个特定的按钮,它会执行一个特定的动作。由于我可以使用组合框选择相当多的选项列表,因此我决定制作一个名为 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
4

1 回答 1

1

我建议您将字典提取到一个单独的程序中,看看它占用了多少空间,然后再担心它占用了多少空间以及这是否是您的问题。

于 2013-10-10T22:22:29.053 回答