レジストリ vs プライベートINI
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/11/22 18:00ID:kWO77Burプログラマの視点から、逆にユーザの視点から、
それぞれの利点や欠点について意見を聞かせてください。
0522名無しさん@お腹いっぱい。
02/07/26 23:34ID:???そこいらのソフトで数KByte使ったところで不安定になるとは思えんが。
0523名無しさん@お腹いっぱい。
02/07/26 23:55ID:???iniとレジストリの読み込みや書き込み速度なんてわからないだろ。
0524名無しさん@お腹いっぱい。
02/07/26 23:56ID:???そうでもないよ。その1/10位でも速度差でるんじゃない?
0525名無しさん@お腹いっぱい。
02/07/27 00:03ID:???おいおい、、、
レジストリに書き込むと不安定になるっていったいどんな環境だよ。
HKCU以下に書き込んでも、OSの基本部分への影響は皆無だよ。
dbファイルからして別物なんだし。
0526名無しさん@お腹いっぱい。
02/07/27 00:04ID:???0527名無しさん@お腹いっぱい。
02/07/27 00:05ID:???それじゃぁ体感できんじゃん…
0528名無しさん@お腹いっぱい。
02/07/27 00:10ID:???レジストリの項目数に対する対数オーダー+メモリアクセスのオーバーヘッド分で
iniの読み書き速度は
iniの項目数に対する線形オーダー+ファイルアクセスのオーバーヘッド分じゃないの?
0529名無しさん@お腹いっぱい。
02/07/27 00:39ID:???「マルチユーザへの対応が簡単」ってだけ?
速度差も馬鹿でかいサイズを一気に読み書きしなきゃ体感できないんだろ?
ていうか、ここの話聞いてると
今あるレジストリ使用するオンラインソフトの99%はINIで問題なさそうな気が…
0530名無しさん@お腹いっぱい。
02/07/27 00:40ID:???それに従ってるんじゃないの?
0531名無しさん@お腹いっぱい。
02/07/27 00:42ID:???あんた、キッチリ調査して言ってますか?
HKCU以下を読むのは各種サービスやShell等です。
カーネルやWin32サブシステムに必要な情報はHCLMにしか記録されていません。
0532名無しさん@お腹いっぱい。
02/07/27 00:43ID:???OSの基本部分の定義が不明。
0533名無しさん@お腹いっぱい。
02/07/27 00:44ID:???速度は2〜3kbでも体感できるよ。
たとえば、ファイラーのDFをiniを作らない状態と、
iniを作ってからで起動速度比べてごらん。
0534名無しさん@お腹いっぱい。
02/07/27 00:45ID:???ディスクアクセスのオーバーヘッドが問題なんじゃない?
0535名無しさん@お腹いっぱい。
02/07/27 00:47ID:???0536名無しさん@お腹いっぱい。
02/07/27 00:48ID:???やってみれば分かるって。
1度起動して全部キャッシュに入れてからでも体感出来るから。
0537名無しさん@お腹いっぱい。
02/07/27 00:48ID:???0538名無しさん@お腹いっぱい。
02/07/27 00:53ID:???よっぽど実装方法が悪かったとか、
使ってるハードがよっぽどショボイってだけなんじゃぁ…
0539名無しさん@お腹いっぱい。
02/07/27 00:55ID:???ディスクアクセスがある時点で例え何バイトであろうと
ファイルを探したりロックしたりする色々なオーバーヘッドがかかるから
それが問題なんじゃないかな?
レジストリは常にメモリに載っかってるから速いんじゃないの?
0540名無しさん@お腹いっぱい。
02/07/27 01:01ID:???ショボくてごめんね。
DFの起動時間を計測した結果、
iniあり:430ms前後
iniなし:460ms前後
実際にワンテンポ遅れる感じがしてる。
ちなみに、計測環境は
PIII1GHz 512MB SDRAM Win2kSP2
LANのプロパティを見ると、起動してから24日と9時間だそうだ。
>>539
iniファイルはすべてレジストリに乗る。
0541名無しさん@お腹いっぱい。
02/07/27 01:02ID:???[OPT]
EDITOR=NOTEPAD.EXE
USEDEF=1
ACTIVE=1
EXTCMD=1
CLOSEQUERY=1
[FONT]
DIRBOLD=1
DIRBLACE=0
の102バイト。
0542名無しさん@お腹いっぱい。
02/07/27 01:06ID:???意味不明だ。
キャッシュに訂正。
これだと、iniが遅いという測定にしかなっていないけど、
レジストリが遅いという意見は出てないから構わないよね。
測定して比べろと言うのなら、適当にiniとレジストリで速度差計ってみるけど。
ちなみに、上の測定に使ったソースの要点部分だけ出す。
timeBeginPeriod(1);
t = timeGetTime();
ShellExecuteEx(&shei);
WaitForInputIdle(shei.hProcess, INFINITE);
printf("%dms\n", timeGetTime() - t);
timeEndPeriod(1);
0543名無しさん@お腹いっぱい。
02/07/27 01:16ID:???自分でレジストリアクセスとiniアクセスをして時間測った方がいいと思う。
0544名無しさん@お腹いっぱい。
02/07/27 01:47ID:???テスト用コード書いてやってみた。[Win98SE、Pen2 333MHz]
それぞれ 10000回データを読み出して timeGetTimeで時間計測。
数字は int型の数字、文字は 11バイトの文字列。
平均を取った大体の所要時間は...
□INI(win.ini[約11kB] の最後のほうのデータを読む)
数字:約3600ms
文字列:約3150ms
□レジストリ(HKCU\software\testというキーの下に値を作成)
数字:約60ms
文字列:約60ms
0545名無しさん@お腹いっぱい。
02/07/27 01:54ID:???HKLM\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping
にキャッシュされてるから普通に同じサイズの
プライベートなiniから読む場合はもっと遅くなるんじゃない?
0546名無しさん@お腹いっぱい。
02/07/27 02:01ID:???0=00000000000000000000
(略)
999=00000000000000000999
上の形式で、GetPrivateProfileString()の1000回ループで計測。
0〜999を順に取得 4200前後
0のみ取得 3900ms前後
999のみ取得 4500ms前後
レジストリ
0〜999を順に取得 200ms前後
0547546
02/07/27 02:02ID:???0548名無しさん@お腹いっぱい。
02/07/27 02:04ID:???0549544
02/07/27 02:06ID:???(11バイトの文字列を 10000回書き込む。INIは文字列でしか書き込めないので、
文字列のみのテスト)
□INI 約3600ms
□レジストリ 約78ms
こんな感じ。INIはもっと遅いかと思ったが...
(実使用時はデータの局所性が下がるので、差は大きくなるかな?)
>>545
Win98なんで、それは大丈夫。
(INIファイルを他の場所にコピーして試したが同じような結果だったし)
0550名無しさん@お腹いっぱい。
02/07/27 02:07ID:???>>544のOSはNT系じゃない(98SE)だからキャッシュされないんじゃない?
0551名無しさん@お腹いっぱい。
02/07/27 02:07ID:???0552名無しさん@お腹いっぱい。
02/07/27 02:12ID:???0553名無しさん@お腹いっぱい。
02/07/27 02:13ID:???WritePrivateProfileString(lpszSection, lpszKey, lpszString, lpszFile)
のlpszSectionとlpszKeyは1万回とも同じ?
それだったら書込するiniの項目数にもよるんじゃない?
書込時にもすでに同じ項目があるかサーチしなきゃいけないわけだし。
0554名無しさん@お腹いっぱい。
02/07/27 02:23ID:???9x/NT関係なくキャッシュされる。
キャッシュされないiniはフルパスを指定したiniのみ。
0555名無しさん@お腹いっぱい。
02/07/27 02:24ID:???データは何でも良いから、>>546のように連番で試してみて。
0557名無しさん@お腹いっぱい。
02/07/27 02:36ID:???>>546の環境だと1000回と、桁が一つ違うのに546の方が遅いのは
いったいどういうマシン使ってるんだ?
今時486のPCなのか?
0558名無しさん@お腹いっぱい。
02/07/27 02:42ID:???0559544
02/07/27 02:51ID:???不思議なことに READ/WRITEの速度がほとんど同じ(INI、レジストリ共に)
□INI 約 610ms
□レジストリ 約135ms
>>546と差が結構あるのは...コーディングとか環境のせい? 当方VC6です。
(デバッグ/リリースビルド両方試したが速度に明確な差はないっぽい)
0560名無しさん@お腹いっぱい。
02/07/27 03:04ID:???下のソースでたのんます。
ウチだと2500ms程度ですた。
#include <windows.h>
#include <stdio.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
int main()
{
char key[256], buf[256];
DWORD t = timeGetTime();
for (int i = 0; i < 1000; i++) {
sprintf(key, "%d", i);
sprintf(buf, "%020d", i);
WritePrivateProfileString("0", key, buf, "c:\\test.ini");
}
printf("%dms\n", timeGetTime() - t);
}
0561名無しさん@お腹いっぱい。
02/07/27 03:07ID:???timeBeginPeriodで制度上げなくていいの?
0562名無しさん@お腹いっぱい。
02/07/27 03:11ID:???数千msに達するのに、10ms程度気にしてもしゃーない。
0563名無しさん@お腹いっぱい。
02/07/27 03:13ID:???>>560の環境がよく分からないけど、>>544の環境と比較して
これほど数値の差が出るほど低いとはあまり考えられないから、
NT/2k/XP環境と考えると、
NT系ではiniのパフォーマンスが極端に落ちていると考えるのがいいのかな?
0565560
02/07/27 03:32ID:???1 ウチの環境がおかしい
2 >>563のようにNT/9xで差がある
のどちらかでしょう。
0566560
02/07/27 03:33ID:???0567名無しさん@お腹いっぱい。
02/07/27 03:35ID:???W2KSP2, P!!!933MHz/512MB/440BX
でiniが無い状態で450ms、一度実行してiniに記録されてる状態で550ms程度だったよ。
0568567
02/07/27 03:39ID:???最適化無しにしても20msくらい遅くなるだけ(timeBeginPeriod(1)使用)。
0570名無しさん@お腹いっぱい。
02/07/27 03:46ID:???560の環境がおかしい。
0572560
02/07/27 04:10ID:???使っていないNSWをアンインストールしたらパフォーマンスが600ms程度まで上がりました。
あとはアンチウイルス系2つ常駐させてるんで、これをはずせばまともなパフォーマンスでるでしょう。
Norton氏ねって感じです
0573名無しさん@お腹いっぱい。
02/07/27 12:15ID:???INIは1回目の READのときはディスクキャッシュに無いから、
相当遅くなることもあるし。
0574名無しさん@お腹いっぱい。
02/07/27 13:00ID:???テスト内容は、
IniFileのエントリ数の違いによる時間の変化。
面倒臭かったからそれぞれ一回ずつ。
左がエントリ数(1のときはエントリ数2個、50の時は51個ね^^;)
開発環境はDelphi
あらかじめ乱数を発生させ、WriteIntegerにて書き込み。
こんな感じ
TC := TimeGetTime;
IniFile := TIniFile.Create(ChangeFileExt('.\'+intToStr(b), '.ini'));
for i:=0 to b do
IniFile.WriteInteger('TEST', IntToStr(i), iwork[i]);
IniFile.Free;
1: 10 ms
50: 90 ms
100: 230 ms
150: 371 ms
200: 531 ms
250: 671 ms
300: 891 ms
350: 1041 ms
400: 1262 ms
450: 1512 ms
500: 1773 ms
550: 2023 ms
600: 2333 ms
650: 2594 ms
700: 2874 ms
750: 3255 ms
800: 3875 ms
850: 4056 ms
900: 4446 ms
950: 4877 ms
1000: 5168 ms
0575574
02/07/27 13:02ID:???1: 0
50: 50
100: 161
150: 210
200: 280
250: 371
300: 461
350: 560
400: 661
450: 982
500: 861
550: 951
600: 1082
650: 1162
700: 1241
750: 1412
800: 1563
850: 1692
900: 1793
950: 1932
1000: 2023
0576574
02/07/27 13:05ID:???1000で10.5kbyte
あと俺の環境は
Cele535 Mem256 2kSP2。
エントリ数が300くらいまで(約3k)ならiniで十分なんじゃないの?
0577名無しさん@お腹いっぱい。
02/07/27 13:44ID:???0578名無しさん@お腹いっぱい。
02/07/27 13:55ID:???だったかな? 最低でも 33ms、本当は 20msくらいでないとダメ...だっけかな?
0579名無しさん@お腹いっぱい。
02/07/27 17:29ID:???使うソフトにもよるが、
500ms程度じゃぁソフト本体の起動時間を考えると大した影響はないだろ。
0580名無しさん@お腹いっぱい。
02/07/29 04:57ID:???> 書き込みできないなら、そのプログラムのフォルダだけ必要なアクセス許可与
> えてくれ、と、運用する側に頼るのは甘えすぎだろうか?
甘えすぎだと思う。やるならそれぐらいインストーラーがやってほしい。
でも複数ユーザーが共有するプログラムのフォルダに下手に書き込み権限を
与えるとトロイを仕掛けることが可能になってしまうのであまりやりたくない。
それにその方式だと移動プロファイルやドメインユーザーにも対応できない。
個人的には、運用によるカバーが許されるのなら素直にプログラム自体を
%USERPROFILE%配下にインストールするよう促したほうがいいと思う。それなら
プログラムはマルチユーザー対応のために何もする必要はないし、ユーザーに
とってもわけのわからない設定をいじる必要がなく直感的でわかりやすい。
XP Homeではセキュリティ設定を変更するにはcacls.exeを使うしかないし。
0581名無しさん@お腹いっぱい。
02/07/31 11:51ID:???#include <windows.h>
#include <stdio.h>
#include <mmsystem.h>
#include "Profile.h"
#pragma comment(lib, "winmm.lib")
int main()
{
char key[256], buf[256];
DWORD t = timeGetTime();
Profile_Initialize("c:\\test.ini", TRUE);
for (int i = 0; i < 1000; i++) {
sprintf(key, "%d", i);
sprintf(buf, "%020d", i);
Profile_WriteString("0", key, buf, "c:\\test.ini");
}
Profile_Flush("c:\\test.ini");
Profile_Free();
printf("%dms\n", timeGetTime() - t);
}
WritePrivateProfileString
5818ms
5487ms
5517ms
Profile_WriteString
180ms
190ms
180ms
他にiniファイルをアクセスする代替ライブラリあれば計測きぼん
0582名無しさん@お腹いっぱい。
02/08/01 01:32ID:dbEqUfqN環境教えて。
VirusBusterやNortonが常駐しているかとかも。l
WritePrivateProfileString1000回だけど、
400ms前後で終わる環境と数秒かかる環境があるようだ。
>>567によるとW2KSP2の環境でも速いこともあるようだし。
0583名無しさん@お腹いっぱい。
02/08/01 08:10ID:M/bkE2i4今更ながら。
「フールセール」って何?
(「フェイルセーフ」「フールプルーフ」なら聞いたことあるんだけど。)
0584名無しさん@お腹いっぱい。
02/08/01 08:30ID:???0586名無しさん@お腹いっぱい。
02/08/01 10:24ID:???レジストリをバックアップする
バッチが欲しい
探すのが面倒
0587名無しさん@お腹いっぱい。
02/08/02 21:56ID:???0588名無しさん@お腹いっぱい。
02/08/02 23:07ID:???とくに、
レジストリに登録する情報が
アプリの追加と削除だけとか、
アプリのポジション情報だけとか、
邪魔なだけ。
それと、どうしてもレジストリに登録する必要があるんなら、
分かりやすい名前で登録して欲しい。
今日たまたまレジストリ開いてみたんだが、
「\TurboPower\APRO\」ってなんじゃ?
これじゃぁ検索のかけようもないじゃないか!
どうせ弄くるんだったらついでに
ソフトのフルネームを入れたキーとか作っておいて欲しい。
0589名無しさん@お腹いっぱい。
02/08/03 16:40ID:???レジストリ使う場合でも HKCU\Software\ 以下ならあんま気にならないけど、
その場合でもそのことを readome.txt 等に明記して欲しい。
0590名無しさん@お腹いっぱい。
02/08/03 16:54ID:???0591名無しさん@お腹いっぱい。
02/08/27 20:40ID:yVdvCA5t0592名無しさん@お腹いっぱい。
02/08/27 20:44ID:???0593名無しさん@お腹いっぱい。
02/08/28 08:22ID:???ViXの設定保存をINIからレジストリに変えたら起動が早くなったので、起動に
時間のかかるようなソフトは選択出来るようにしてホスィ
0594名無しさん@お腹いっぱい。
02/08/28 12:11ID:???禿同。
でも、INIばかでかくても最近はそこまで気にならんよ。
ここにいてるヤツも結構タブブラウザ使ってるだろうけど、
起動に物凄いストレス感じるヤツいてるか?
最近のタブブラウザの大半はINIだろ。
みんな大した文句言わずに使ってるじゃん。
Donutにいたっては「軽い」っていわれてんだぜ?
俺は現在のメインはSleipnirだけど、
アレほど設定をバカスカ書くヤツもそうそうないだろ。
それでもそれなりの起動スピードを実現してる。
ようは「早いから」ってだけでレジストリ使用するやつは
面倒くさいからだけなんだろうね…
0595名無しさん@お腹いっぱい。
02/08/28 16:35ID:???それだけで体感できるパフォーマンスの低下が起きると思うが
0596名無しさん@お腹いっぱい。
02/08/28 16:35ID:???>面倒くさいからだけなんだろうね…
なんでコイツはこんなに偉そうなんだろう…?
使わなきゃいいじゃん。
0597名無しさん@お腹いっぱい。
02/08/28 19:38ID:???スレタイに「VS」って書いてるじゃん。
目暗か?
そんなことを言ってずにスレの流れも悪くなってきてんだから
もう少し建設的な意見を述べたらどうだ?
お題
「INIでスピードを殺さない方法とDonutが何故早いのか」
まずはDonutがレジストリ派に代わった場合どうなるか。
見違えるほど早くなるんだろうか。
それともそんなに変わらないだろうか。
0598名無しさん@お腹いっぱい。
02/08/28 19:54ID:???レジストリ使うソフトがINI使うようになったらどれくらい遅くなるのかどうかということだけどな。
多機能なエディタとか。
0599名無しさん@お腹いっぱい。
02/08/28 21:24ID:???それが実用的なスピードだったらそれでいいわけで…。
それに、エディタとかブラウザみたいに一回立ち上げたらそうそう消すことないんだから、
それ程起動スピードなんて気にする必要はないと思う。
0600名無しさん@お腹いっぱい。
02/08/28 22:01ID:???vs はレジストリとiniの利便性や速度、開発側の手間も含めた比較などだろ?
レジストリを使ったソフトを作ってる作者をめんどくさがりだって言うのはどうかと。
レジストリは利用手順が煩雑なんで、どっちかというとレジストリの方がめんどくさい。
マルチユーザーなどを考えると過去にも出てきたように、iniが面倒になる(唯一絶対の解が無い)
…まぁ、一度ラッパーを作ってしまえば良いことなんだが。
>「INIでスピードを殺さない方法とDonutが何故早いのか」
iniでスピードを殺さない方法
>iniにコメントを含め極力何も記述しない事。
>速度に問題が出るほどたくさんのプロパティを一度に読むようにしないこと。
Donutが速い理由
>実際問題として、通常サイズでのiniのオーバーヘッドはたいしたこと無いし、
>頻繁に起動終了を繰り返すアプリでもないから、気になることがない。
0601名無しさん@お腹いっぱい。
02/08/28 22:03ID:???SDIだったら頻繁に立ち上げることになると思うが?
0602名無しさん@お腹いっぱい。
02/08/28 22:17ID:???0603名無しさん@お腹いっぱい。
02/08/28 23:46ID:???> Donutが速い理由
比較対照がIEだからじゃないのか?
0604名無しさん@お腹いっぱい。
02/08/29 00:43ID:???相対速度じゃあんまり参考にならないよな
0605名無しさん@お腹いっぱい。
02/08/29 14:14ID:???スタートページ表示しないようにしたときの
起動速度は実用には耐えがたい速度なのか?
俺は十分に実用的な速度だと思うぞ。
0606名無しさん@お腹いっぱい。
02/08/29 16:20ID:???0607名無しさん@お腹いっぱい。
02/08/29 22:06ID:???それはソフトによるだろ。
ブラウザなんかは別に0.5秒かかろうが1秒かかろうが大して気にならないが、
たとえば付箋紙とかメモソフトでメモを記入できるようになるまでに0.5秒かかったらイライラする。
起動した瞬間、ホットキーを押した瞬間に即座に入力可能になっていないと、使えないだろ。
0608名無しさん@お腹いっぱい。
02/09/13 02:00ID:J1HjTVjI0609名無しさん@お腹いっぱい。
02/09/13 02:28ID:???マルチユーザーはどうすんの?
0610名無しさん@お腹いっぱい。
02/09/13 03:36ID:???マルチユーザは「必 要 な い」
マルチユーザを考える必要のないソフトに
マルチユーザのためだけにレジストリを弄られるのは
「迷 惑」
0611名無しさん@お腹いっぱい。
02/09/13 03:38ID:???0612名無しさん@お腹いっぱい。
02/09/13 04:07ID:???何も知らない/Power権限もらえないユーザーにも設定を強要するの?
0613名無しさん@お腹いっぱい。
02/09/13 20:17ID:???0614名無しさん@お腹いっぱい。
02/09/13 20:41ID:???0615名無しさん@お腹いっぱい。
02/09/13 21:21ID:???よ っ ぽ ど 迷 惑
0616名無しさん@お腹いっぱい。
02/09/13 21:24ID:???たいていのユーザーは設定がどこに保存されるかなど気にもとめない。
0617名無しさん@お腹いっぱい。
02/09/13 21:40ID:???基地外は大抵自分が標準的な考えだと思うものだ。
0618名無しさん@お腹いっぱい。
02/09/13 21:41ID:???Microsoftも基地外だといわれたら反論できんが(w
0619名無しさん@お腹いっぱい。
02/09/13 21:43ID:???大規模なソフトはレジストリ。
0620名無しさん@お腹いっぱい。
02/09/13 23:43ID:???そのソフトに本当にマルチユーザ必要かちゃんと検証しれ。
INIでどうしてもアホみたいに重くなるなら、
読み込みのタイミングを分散させるとかして実用に耐え得るようにしれ。
検証に検証を重ねた上どうしてもレジストリが必要ならば
ユーザでINIかレジストリかを選べるようにしれ。
あと、インストーラやめれ。
インストーラ使うなら使わない版も同時に用意しれ。
0621名無しさん@お腹いっぱい。
02/09/13 23:46ID:???■ このスレッドは過去ログ倉庫に格納されています