Windows 11標準の天気アプリがまさかのメモリ1GB超え!?リソース消費が深刻な件
Windows 11's built-in Weather app wastes more than 1 GB of RAM
Windows 11's built-in Weather app wastes more than 1 GB of RAM
Windows 11に標準搭載されている「天気」アプリですが、なんと1GB以上のRAMを消費してしまうという衝撃的な報告が上がっています。軽量であるはずのウィジェット機能やアプリがこれほどのリソースを食いつぶすのは、メモリ管理の観点から見てもかなり厄介な問題です。
しかも広告まで入ってるなんて。Microsoftさん、マジ?天気アプリの広告収益なんて本当に必要なの?次はスタートメニューに広告でも出すつもりか?
比較として、macOSの標準天気アプリはメモリ使用量が250MB以下と報告されている
それも十分重いよ。もっとマシな比較対象はなかったのか?このひどいメモリの無駄遣いを説明するのに。
これのせいで深掘りしちゃったよ。なぜ単機能のシンプルなアプリが、数メガバイト、いやそれ以下にできないんだ?人気の選択肢はElectronで100MB超えか、実行ファイルにPython3を埋め込んで最低でも40MBってところだ。
でも、ネイティブで構築するならMicrosoftのツール、DLLなんかを全部自由に使えるはずだよね。理論上は1MB以下だって作れるはずなのに、実際には最悪の選択肢になってる。
2006年1月に自作したゲーミングPCの話だけど、当時1680x1050のモニターでBattlefield 2、Trillian、Xfire、Thunderbird、Winampを同時に動かしてた時のシステムメモリは合計で1GBしかなかったぞ。
時が経つにつれて、OSレベルでGC(ガベージコレクション)プールを用意して、言語側のランタイムにGCを持たせるんじゃなくて、すべてのGC言語をそこで動作させるべきじゃないかって思いが強まってきた。
こうした単純なアプリが数GBものメモリを食う大きな理由は、GCがポーズやカクつきを避けるためにメモリを際限なく広げようとするからだ。実際には1GBのうち10%しか使われてなくても、高速にアロケーションを行うために余分なヘッドルームが必要になってしまう。
ユニバーサルなGCが無理だとしても、ランタイム間でGCを共有できるようにするのは全体にとってプラスだろう。JVMを3つ動かしているなら、それぞれ本当は200MBで足りる仕事なのに、バースト時のために1GBずつ割り当てたりする。もし3つを1つに統合できれば、アロケーションのオーバーヘッドもメモリ使用量も大幅に減らせるはずだ。
JavaにはWARデプロイという形である程度存在しているけど、制限が多くて使い勝手が悪い。例えば、全てのJVMのバージョンを揃えなきゃいけないとかね。
これの簡単な回避策:
EdgeにuBlock Originをインストールする。
Edgeを開いてMSN天気を見る。
アドレスバーの「アプリとしてインストール」ボタンを押して、スタートメニューにアイコンを作成する。
プリインストールされている天気アプリのアイコンを削除する。
これで同じ天気アプリがメモリ約130MBで、しかも広告なしで使える。ネイティブアプリほど快適ではないけど、ブロックできない広告やMSNフィードが満載のデフォルトアプリより1000%マシだ。
(ついでにウィジェット設定で「Discover / Microsoft Start feed」もオフにしておけ。中身は同じゴミだ。排除してしまえ。)
めちゃくちゃ重いという事実はさておき、RAM使用量の正確な測定は難しい。測定基準はいくつかあって、「正しい」ものなんてないからな。
記事からも明らかだけど、メモリを食っているのは天気アプリそのものじゃなくて、それが動いているフレームワークだ。「レンダラー」とか「GPUプロセス」とかが大部分を占めている。
タスクマネージャーが教えてくれないのは、それが共有コンポーネントかどうかだ。もし「レンダラー」が使っている662MBが他のWindowsコンポーネントと共有されているなら、天気アプリを終了させても期待したほど空きメモリは増えないかもしれない。そのコンポーネントを使っている全てのプロセスを終了させる必要があるからね。中にはシステムの中核アプリも含まれているかもしれない。
それにプライベートメモリと共有メモリの区別だけでなく、実際のRAM使用量と仮想メモリの区別もある。プロセスが100GBのファイルをメモリマップすることも可能だ。アドレス空間で見れば100GBの仮想メモリを消費しているように見えるけど、実際の物理RAMは0かもしれないし、アクセスしている部分だけは消費されるかもしれない。後でOSがページをディスクに書き戻せば回収されることもある。
単純な「大きなmalloc()」によるメモリ使用量でさえ、OSがオーバーコミットしたり、スワップしたり、メモリ圧縮を使ったりするから一概には言えない。システムに余裕があっても、ディスクキャッシュのために空きを作ろうとOSが勝手にやることもある。
だからタスクマネージャーの「1GB」なんてパフォーマンスへの影響を示す曖昧な目安に過ぎないんだ。それに「タスクマネージャー」系のツールはプログラムごとに同じ数値を出すとは限らない(WindowsとMacで比較するのは誤解を招く)。Windowsの「プロセスエクスプローラー」みたいな上級者向けツールなら、見方によってもっと詳細なメモリ消費の値を確認できる。
さらに悪いことに、同じ天気アプリの以前のバージョンはWindows 10では完全なネイティブアプリだった。完璧に動作していたアプリを、なぜわざわざこんな風に劣化させるのか?
Chris Titusのツールでプリインストールの天気アプリは削除できるのか?(管理権限のあるWindowsマシンを長らく使ってないから覚えてない)もしできるなら、そのツールを走らせた後にメモリが1GB空くのか?
macOSの方がRAM使用量が5倍少ないと指摘しているけど、天気アプリで230MBって誇れるような数字なの?