私が作ったプログラムの核心は、キーボード フックです。特定のボタンを押すと、特定のアクションが実行されます。Combobox を使用して選択できるオプションのリストがかなり大きいため、ECCMDS (組み込みコントローラー コマンドの略) と呼ばれる辞書を作成することにしました。次に、Combobox アイテムを ECCMDS.Keys に設定し、コマンドで名前を選択します。XMLファイルに保存するだけの文字列であるため、保存も簡単です。プログラムは 4 ~ 8 個のボタンを監視します。問題は実行時に発生します。このプログラムは約 53 MB のメモリを使用します (もちろん、今調べてみると 16 MB と表示されています :/) これが実行されているタブレットには 3Gb のメモリと Atom プロセッサが搭載されています。通常、私は53メガを嘲笑しますが、
そのため、ディクショナリは 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);})},
};
これを達成するためにリフレクションなどを使用することは可能ですか?
編集
したがって、新しいプログラムを作成して 2 つの方法を比較するという素晴らしい提案の後、それは私の辞書ではないと判断しました。私は、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