Evernoteが重い場合の対策試行

Windows版のEvernoteを使っていると、ファイルアクセスが頻発してノートの切り替えが遅かったり、ポップアップメニューがなかなか開かなかったりする場合があります。

重いアプリを裏で実行している場合に多いようなので、他のアプリにメモリを取られ、EvernoteのデータベースファイルがWindowsのファイルキャッシュから追い出されているのが原因ではないかと予想しています。

前からこれを何とかできないかと考えていたのですが、とりあえずファイルをキャッシュに乗せるだけなら、とにかくデータベースファイルへの読み込みが発生すればよいのではないか、ということで試してみました。

まず最初に考えたのは、単純にEvernoteのデータベースファイルをコピーしてみるという方法です。Windowsコマンドラインで書くと、例えばこんな感じです。

copy C:\Evernote\Evernote35\Databases\xxx.exb c:\temp\dummy.tmp
del c:\temp\dummy.tmp

このようなコマンドをバッチファイルに書いてEvernoteが重い状態で実行してみたところ、確かに実行後はEvernoteクライアントのファイルアクセスが減少し、効果は見られるようでした。

ただ、copyコマンドの直後にコピー先のファイルを消していることでもわかるように、ファイルアクセスするだけのために同じ内容のファイルをもう1つ作るのはいかにも無駄です。

要はファイル全体をリードできればよいわけで、プログラムを組めばそのような処理は簡単にできますが、この程度の試行でそこまでするのも大袈裟です。そこで少し調べてみたところ、Windowsには「nul」というデバイスがあることが分かりました。

これは出力デバイスでデータを書きこむことができますが、書き込まれたデータは全て無視されるという特殊なデバイスです。主に、メッセージを出力するコマンドを実行する時にそのメッセージをユーザーに見せたくない場合などに、コマンドの出力をリダイレクトして出力されないようにする、というような用途が主目的のようです。

このnulデバイスを使用して前出のコマンドを書きなおすと、以下のようになります。

copy C:\Evernote\Evernote35\Databases\xxx.exb nul

処理は非常にスッキリしました。また、実行しても発生するIOは読み込みのみで書き込みが発生しませんので、システム負荷的にも優しいです。

残る問題は、いかに読み込みのみとはいえDBファイル全体を読み込みますので、処理が終わるまでしばらく時間がかかることです。ちなみにうちの場合、DBファイルは1GBを超えていますので、実行し終わるまでに2〜3分程度かかります。

ただ実行を開始してからしばらくたつと、まだ実行中でもEvernoteクライアントは意外とサクサク動くことがわかりましたので、このコマンドをバッチファイルにして、Evernoteが重く感じたら実行してみる、というこでしばらく運用してみようかと思います。

なお、この方法はDBファイルに直接アクセスするという荒業を使っていますので、万一データなどに異常が発生しても文句は言えません。もし試してみようという方がおられましたら、ファイルのバックアップを取るなどデータの保全には十分に注意を払ったうえでお試しください。