Classic Shell DataCache.dbへの書き込みを止める。

最終更新日

Classic Shellによりディスクアクセスが増える現象

1時間に数回ディスクアクセスが増えるため調べたところ、原因の一つがClassic Shellがキャッシュの書き込みでした。

Classic Shellとは

スタートメニューの表示をXP風やWindows7風などに変更可能にし、細かくカスタマイズできるソフト。

デフォルトでスタートボタンが存在しないWindows8に、スタートボタンを追加。さらに、PC起動時にタイル状のスタート画面を飛ばしてデスクトップ画面を表示してくれる。

キャッシュの保存場所 (Windows7、8の場合)

C:\Users\%username%\AppData\Local\ClassicShell\Datacache.db
または、C:\Users\%username%\AppData\Roaming\ClassicShell\Datacache.db

両方にある場合は、どちらかが古いバージョンの時のものです。古い方は削除しても構いません。

私の環境ではファイルサイズが2.8M程度。20分前後の間隔で更新されており、たまにサイズがわずかに増えます。削除しても、しばらくすると自動的に再作成されます。

現在 Windows 8 32bitで、Classic Shell 4.1.0を使用中。

(2015/06/09時点では、Classic Shell 4.2.1を使用中)

インストール時にClassic Start Menuのみを選択。Classic Explorer、Classic IE、Classic Shell Updateはインストールしていません。

アイコンとデータのキャッシュが繰り返し書き込まれる。

Classic Shell 4.0のリリース時に、キャッシュについて次のように書かれています。
(http://www.classicshell.net/forum/viewtopic.php?f=4&t=1343&p=6978 より抜粋)

The icons and data are saved to a cache on disk at %APPDATA%\ClassicShell, so the menu should stay responsive all the time. If you don't want repeated writes to the disk such as in case of an SSD, set the Read-only attribute for the %appdata%\ClassicShell\Datacache.db

翻訳 (適当)

アイコンとデータのキャッシュが %APPDATA%\ClassicShell フォルダーに保存される。これはメニューが常にすばやく応答するためのものであるが、ディスクに繰り返し書き込んでほしくないこともある。例えばSSDの時など。そんな場合は、%appdata%\ClassicShell\Datacache.dbを読み取り専用にすること。

SSDの場合は特に、書き込みを止めた方がよさそうです。(SSDの寿命の問題で)

私のPCはHDDですけれど、やはり止めています。オンラインゲーム中等の高負荷時でも構わず書き込みが発生するためです。

Datacache.dbへの書き込みを止める。(手作業)

Classic ShellのDatacacheを読み取り専用にします。一応、古いキャッシュを残さず中身は空に。

(Datacache.dbをただ削除しても、しばらくしたら復活し書き込みが行われるので、解決にはなりません)

あらかじめ、フォルダーオプションの「登録されている拡張子は表示しない」のチェックを外しておきます。

  1. %userprofile%\AppData\Local\ClassicShellフォルダーを開く。
    なければ、%userprofile%\AppData\Roaming\ClassicShellフォルダーを開く。
  2. フォルダー内のDatacache.dbを削除。
  3. 同じフォルダー内で右クリック→新規作成で空のテキストドキュメントを2つ作る。

    ファイル名は、Datacache.dbとDatacache.tmp。

    2つとも、右クリック→プロパティ→全般タブの読み取り専用にチェックを入れる。

プロパティ画面で、読み取り専用にチェックを入れたところ。

別のユーザーアカウントがあれば、そちらでも同様に行います。

ここでちょっと解説。

Datacache.dbを読み取り専用にしてからしばらく経つと、代わりにDatacache.tmpファイルが作成されます。(容量は同じ) 今度はDatacache.tmpに書き込まれることになります。

そのため、2つとも読み取り専用にする必要があります。

Datacache.dbを読み取り専用にしたら、Datacache.tmpが作られた。

ところで、Classic Shell 4.0.4での変更点として、次のように書かれていました。
(http://www.classicshell.net/forum/viewtopic.php?f=4&t=2025)

The cache is correctly discarded and rebuilt if the Windows language is changed

(またまた適当な翻訳)

Windowsの言語が変更されるときは、きちんとキャッシュを廃棄、再構築する。

このキャッシュがDatacache.dbのことを指すのかわかりません。
しかし、Datacache.dbが作り変えられるようなことがあるとしたら、また読み取り専用にチェックを入れる必要がありそうです。

Datacache.dbへの書き込みを止める。(コマンドで)

バッチファイルを作成して実行します。(Windows7 64bitとWindows 8 32bitで動作確認済)

※ 変更されるのは、現在ログオンしているユーザーのものだけです。他のユーザーの分は変更されません。

Datacache.dbへの書き込みを止めるバッチファイル

  1. 下のグレー部分の@echo offからexitまでをコピーし、メモ帳に貼り付ける。
  2. 名前を付けて保存。拡張子は.batにする。
    例 Stop_ClassicShell_Datacache.bat
  3. .batファイルをダブルクリックして実行する。

@echo off

set TARGET1=%userprofile%\AppData\Local\ClassicShell
set TARGET2=%userprofile%\AppData\Roaming\ClassicShell

if exist "%TARGET1%\" (
del /f /q %TARGET1%
pushd %TARGET1%
goto NEXT
) else if exist "%TARGET2%\" (
del /f /q %TARGET2%
pushd %TARGET2%
goto NEXT
) else (
goto END
)

:NEXT

type nul > DataCache.db
type nul > DataCache.tmp
attrib +r DataCache.db
attrib +r DataCache.tmp

:END

exit

上記のバッチファイルの内容

ClassicShellフォルダーがどこにあるかを探し、フォルダー中のファイルを削除、改めてDataCache.dbとDataCache.tmpファイルを作成、読み取り専用にします。

探す順序は、まず%userprofile%\AppData\Local内、なければ%userprofile%\AppData\Roaming内、どちらにもなければ何もしません。

元の設定に戻す。(DataCacheへの書き込みを許可する)

手動で戻す場合

%userprofile%\AppData\Local\ClassicShellフォルダー、または、%userprofile%\AppData\Roaming\ClassicShellフォルダー内のDatacache.dbとDatacache.tmpを削除します。その後、何もしなくてもDatacache.dbが再作成されます。

バッチファイルで戻す場合

  1. 下のグレー部分の@echo offからexitまでをコピーし、メモ帳に貼り付ける。
  2. 名前を付けて保存。拡張子は.batにする。
    例 Default_ClassicShell_Datacache.bat
  3. .batファイルをダブルクリックして実行する。

@echo off

set TARGET1=%userprofile%\AppData\Local\ClassicShell
set TARGET2=%userprofile%\AppData\Roaming\ClassicShell

if exist "%TARGET1%\" (
del /f /q %TARGET1%
goto END
) else if exist "%TARGET2%\" (
del /f /q %TARGET2%
goto END
)

:END

exit

上記のバッチファイルの内容

DataCache.dbとDataCache.tmpを、それらが入ったClassicShellフォルダーごと削除します。

処理する順序は、まず%userprofile%\AppData\Local内、なければ%userprofile%\AppData\Roaming内、どちらにもなければ何もしません。

バッチファイル実行後、ClassicShellをバックグラウンドで稼働させていれば、遅くとも数十分後には、ClassicShell\DataCache.dbが自動的に再作成されます。