仕事で作っているアプリで発見した現象。今年のバージョンから必須要件を引き上げて Visual Studio 2012 で開発、.NET Framework 4.0 + SQL Server Compact 4 になったとたん、「Windows XP であまりに遅くて使えない」というテスト結果が。
メンバーが調べてくれた結果、
Windows XP の SQL Server Compact 4 で、データベースを暗号化(パスワード付きに)している場合、極端に動作が遅くなる
とのこと。実際、DBアクセス部分で、通常は1秒かからないところに40秒以上かかっていました。
対処方法は
C:\Documents and Settings\All Users\
Application Data\Microsoft\Crypto\RSA\MachineKeysのフォルダに、ユーザー(Usersでも可)の読み取り権限を追加する
これでなぜか、1秒かからない状態に戻りました。う~ん、これを設定しないでも遅いだけでちゃんと動いているところから見ても、なんだか例外処理か何かをやって時間がかかってるのかな?ともあれ、これで解決できたので良いのですが。これはテストしないと発見できない(汗
インストーラでC#プログラムから自動で権限をつけても良いのですが、インストールマニュアルに記載することで対応することにしました。
以下、参考
- SQL Server CE4.0 runs very slow in windows XP
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/38fd8e97-7250-4295-b683-6d8dd8fda776/sql-server-ce40-runs-very-slow-in-windows-xp - SqlCe opens slow under a limited user account in Windows XP
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/1b21bb10-1fa3-4954-87d2-f3fa61e8256a/sqlce-opens-slow-under-a-limited-user-account-in-windows-xp