2

次のコードを使用して、Windows 7 で C# .NET 4.0 を管理者として既存のレジストリ キーに書き込みます。

Microsoft.Win32.Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MY\\SOFTWARE\\Name", "key_name", "key_value");

問題なく動作しているように見えますが、Web 上の他の人々が、これを行う必要がある、Registry.Close()または動作しないと主張しているのを見てきました。

OpenSubKeyこれがすでに機能しているように見える場合、本当にCloseキーが必要ですか?

自分のコードが機能することに文句を言っているのではなく、ベスト プラクティスを理解したいだけです。

4

3 に答える 3

4

MSDN から: http://msdn.microsoft.com/en-us/library/5a5t63w8.aspx

SetValue メソッドは、呼び出されるたびにレジストリ キーを開き、値を設定し、キーを閉じます。多数の値を変更する必要がある場合は、RegistryKey.SetValue メソッドを使用するとパフォーマンスが向上する可能性があります。RegistryKey クラスには、アクセス制御リスト (ACL) をレジストリ キーに追加したり、値を取得する前にデータ型をテストしたり、キーを削除したりできるメソッドも用意されています。

于 2013-09-25T11:54:05.083 に答える
2

Registry クラスの静的メソッドを使用している場合は、明示的に閉じる必要はありません。MSDNから

.NET Framework バージョン 2.0 では、Registry クラスには、レジストリ キーから値を設定および取得するための静的な GetValue および SetValue メソッドも含まれています。これらのメソッドは、使用されるたびにレジストリ キーを開いたり閉じたりします。

ただし、そうでない場合、レジストリで clise を呼び出すと、キーが閉じられ、内容が変更されている場合はディスクにフラッシュされます。例えば

RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample");
rk.Close();
于 2013-09-25T11:56:40.843 に答える
0

作成されたキーを閉じることをお勧めします。例えば

//not actual code
Key1.Create()
Key 2 = Key1.SetValue();
and so on

したがって、キーを閉じるには逆の順序が必要です。子から親へ

于 2013-09-25T11:55:13.620 に答える