C#注冊表技術及操作

目錄

一、注冊表基礎

1.Registry和RegistryKey類?

(1)Registry類

(2)RegistryKey類

二、在C#中操作注冊表

1.讀取注冊表中的信息?

(1)OpenSubKey()方法

(2)GetSubKeyNames()方法

(3)GetValueNames()方法

2.創建和修改注冊表信息

(1)創建注冊表信息

(2)修改注冊表信息

3.刪除注冊表中的信息

(1)DeleteSubKey()方法

(2)DeleteSubKeyTree方法

(3)DeleteValue()方法?


????????注冊表是一個龐大的數據庫系統,它記錄了用戶安裝在計算機上的軟件、硬件信息和每一個程序的相互關系。注冊表中存放著很多參數,直接控制著整個系統的啟動、硬件驅動程序的裝載以及應用程序的運行。

????????由于Windows 10系統本身的安全性問題,使用C#操作注冊表時,可能會提示無法操作相應的注冊表項,這時只需要為提示的注冊表項添加everyone用戶的讀寫權限即可

一、注冊表基礎

????????Windows注冊表包含Windows安裝、用戶喜好以及已安裝軟件和設備的所有配置信息的核心存儲庫。

1.RegistryRegistryKey類?

????????NET Framework提供了訪問注冊表的類,比較常用的是Registry和RegistryKey類,這兩個類都在Microsoft.Win32命名空間中。

(1)Registry類

????????Registry類不能被實例化,它的作用只是實例化RegistryKey類,以便開始在注冊表中瀏覽。Registry類是通過靜態屬性來提供這些實例的,這些屬性共有7個:

屬 ??性

說 ??明

ClassesRoot

定義文檔的類型(或類)以及與那些類型關聯的屬性。該字段讀取Windows注冊表基項HKEY_CLASSES_ROOT

CurrentConfig

包含有關非用戶特定的硬件的配置信息。該字段讀取Windows注冊表基項HKEY_CURRENT_CONFIG

CurrentUser

包含有關當前用戶首選項的信息。該字段讀取Windows注冊表基項HKEY_CURRENT_USER

DynData

包含動態注冊表數據。該字段讀取Windows注冊表基項HKEY_DYN_DATA

LocalMachine

包含本地計算機的配置數據。該字段讀取Windows注冊表基項HKEY_LOCAL_MACHINE

PerformanceData

包含軟件組件的性能信息。該字段讀取Windows注冊表基項HKEY_PERFORMANCE_DATA

Users

包含有關默認用戶配置的信息。該字段讀取Windows注冊表基項HKEY_USERS

????????Registry類主要用于存儲有關用戶首選項的信息、存儲本地計算機的配置信息、存儲有關類型和類及其屬性的信息、存儲有關默認用戶配置的信息、存儲軟件組件的性能信息、存儲非用戶特定的硬件信息、存儲動態數據。

(2)RegistryKey類

????????RegistryKey實例表示一個注冊表項,這個類的方法可以瀏覽子鍵、創建新鍵、讀取或修改鍵中的值。也就是說,該類可以完成對注冊表項的所有操作。除了設置鍵的安全級別之外,RegistryKey類可以用于完成對注冊表的所有操作。

????????RegistryKey類的常用屬性及說明:

屬 ???性

說 ???明

Name

???檢索項的名稱

SubKeyCount

???檢索當前項的子項數目

ValueCount

???檢索項中值的計數

????????RegistryKey類的常用方法及說明

方法

說 明

?Close

???關閉鍵

CreateSubkey

???創建給定名稱的子鍵(如果該子鍵已經存在,就打開它)

DeleteSubkey

???刪除指定的子鍵

DeleteSubkeyTree

???徹底刪除子鍵及其所有的子鍵

DeleteValue

???從鍵中刑除一個指定的值

GetSubkeyNames

???返回包含子鍵名稱的字符串數組

?GetValue

???返回指定的值

GetValueNames

???返回一個包含所有鍵值名稱的字符申數組

OpenSubKey

???返回表示給定子鍵的 RegistryKey 實例引用

?SetValue

???設置指定

二、C#中操作注冊表

????????主要包括讀取注冊表中的信息刪除注冊表中的信息以及創建和刪除注冊表信息

1.讀取注冊表中的信息?

???????讀取注冊表中的信息主要是通過RegistryKey類中的OpenSubKey()方法、GetSubKeyNames()方法和GetValueNames()方法實現的。

(1)OpenSubKey()方法

????????OpenSubKey()方法用于檢索指定的子項。

public RegistryKey OpenSubKey(string name)
? name:要以只讀方式打開的子項的名稱或路徑。
? 返回值:請求的子項。如果操作失敗,則為空引用。

????????如果要打開的項不存在,OpenSubKey()方法將返回null引用,而不是引發異常。

(2)GetSubKeyNames()方法

????????GetSubKeyNames()方法用于檢索包含所有子項名稱的字符串數組。

public string[]GetSubKeyNames()
返回值:包含當前項的子項名稱的字符串數組。?

????????如果當前項已被刪除,或是用戶沒有讀取該項的權限,將觸發異常。

// 通過GetSubKeyNames()方法檢索
// HKEY_LOCAL_MACHINE\SOFTWARE子鍵下包含的
// 所有子項名稱的字符串數組
using Microsoft.Win32;namespace _01
{public partial class Form1 : Form{private RichTextBox? richTextBox1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // richTextBox1// richTextBox1 = new RichTextBox{Dock = DockStyle.Fill,Location = new Point(0, 0),Name = "richTextBox1",Size = new Size(284, 241),TabIndex = 0,Text = ""};RegistryKey regkey = Registry.LocalMachine;RegistryKey? sys = regkey.OpenSubKey(@"SOFTWARE");foreach (string str in sys!.GetSubKeyNames()){richTextBox1.Text += str + "\n";}// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(284, 241);Controls.Add(richTextBox1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";           }}
}

?

(3)GetValueNames()方法

????????GetValueNames()方法用于檢索包含與此項關聯的所有值名稱的字符串數組。

public string[]GetValueNames()
返回值:包含當前項的值名稱的字符串數組。 ?

????????如果沒有找到此項的值名稱,則返回一個空數組;如果在注冊表項設置了一個具有默認值的名稱為空字符串的項,則GetValueNames()方法返回的數組中包含該空字符串。

// 讀取HKEY_LOCAL_MACHINE\SOFTWARE子鍵下的項目信息
// 利用對象的OpenSubKey()方法打開指定的鍵
using Microsoft.Win32;namespace _02
{public partial class Form1 : Form{private ListBox? listBox1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){listBox1 = new ListBox{Dock = DockStyle.Fill,FormattingEnabled = true,ItemHeight = 12,Location = new Point(0, 0),Name = "listBox1",Size = new Size(294, 271),TabIndex = 0};listBox1.Items.Clear();var regkey = Registry.LocalMachine;RegistryKey? sys = regkey.OpenSubKey(@"SOFTWARE");foreach (string str in sys!.GetSubKeyNames()){listBox1.Items.Add("子項名:" + str);RegistryKey? sikey = sys.OpenSubKey(str);  //打開子鍵foreach (string sVName in sikey!.GetValueNames()){listBox1.Items.Add(sVName + sikey.GetValue(sVName));}}// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(294, 271);Controls.Add(listBox1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";}}
}

?

2.創建和修改注冊表信息

(1)創建注冊表信息

????????通過RegistryKey類的CreateSubKey()方法和SetValue()方法可以創建注冊表信息,下面介紹這兩種方法。

  • CreateSubKey()方法

????????主要用于創建一個新子項或打開一個現有子項以進行寫訪問。?

public RegistryKey CreateSubKey (string subkey)
? subkey:要創建或打開的子項的名稱或路徑。
? 返回值:RegistryKey對象,表示新建的子項或空引用。如果為subkey指定了零長度字符串,則返回當前的RegistryKey對象。
  • SetValue()方法

????????主要用于設置注冊表項中的名稱/值對的值。

public void SetValue (string name,Object value)
? name:要存儲的值的名稱。
? value:要存儲的數據。

????????SetValue()方法用于從非托管代碼中訪問托管類,不應從托管代碼調用。

// 通過RegistryKey類的CreateSubKey()方法和SetValue()方法創建一個子鍵
using Microsoft.Win32;namespace _03
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{                Location = new Point(12, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "創建子鍵",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(384, 211);Controls.Add(button1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "創建子鍵";}/// <summary>/// 在主鍵HKEY_LOCAL_MACHINE的HARDWARE鍵下創建一個名為MR的子鍵,/// 然后在這個子鍵下再創建一個名為測試的子鍵,/// 在測試子鍵下創建一個名為value、數據值是1234的鍵值/// </summary>private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;RegistryKey? software = hklm.OpenSubKey("HARDWARE", true);RegistryKey? main1 = software!.CreateSubKey("MR");RegistryKey? ddd = main1.CreateSubKey("測試");ddd.SetValue("value", "1234");MessageBox.Show("創建成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

?

(2)修改注冊表信息

????????由于注冊表中的信息十分重要,所以一般不要對其進行寫的操作。也可能是這個原因,在.Net Framework中并沒有提供修改注冊表鍵的方法。而只是提供了一個危害性相對較小的SetValue()方法,通過這個方法,可以修改鍵值。在使用SetValue()方法時,如果它檢測到指定的鍵值不存在,就會創建一個新的鍵值。?

// 將主鍵HKEY_LOCAL_MACHINE\HARDWARE\MR\測試
// 下名為value的鍵值的數據值修改為abcd
using Microsoft.Win32;namespace _04
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(197, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "修改",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(284, 111);Controls.Add(button1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";}private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;RegistryKey? software = hklm?.OpenSubKey("HARDWARE", true);RegistryKey? dddw = software?.OpenSubKey("MR", true);RegistryKey? regkey = dddw?.OpenSubKey("測試", true);regkey?.SetValue("value", "abcd");MessageBox.Show("修改成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

3.刪除注冊表中的信息

????????刪除注冊表中的信息主要通過RegistryKey類中的DeleteSubKey()方法、DeleteSubKeyTree()方法和DeleteValue()方法來實現。

(1)DeleteSubKey()方法

? ? ? ? DeleteSubKey()方法用于刪除不包含任何子鍵的子鍵。 語法如下:

publie void DeleteSubKey (string subkey,bool throwOnMissingSubKey)
? subkey:要刪除的子項的名稱。
? throwOnMissingSubKey:如果值為true,在程序調用時,刪除的子鍵不存在,則產生一個錯誤信息;如果值為false,在程序調用時,刪除的子鍵不存在,也不產生錯誤信息,程序依然正確運行。?

????????如果刪除的項有子級子項,將觸發異常。必須將子項刪除后,才能刪除該項。

// 通過RegistryKey類的DeleteSubKey()方法刪除
// HKEY_LOCAL_MACHINE\HARDWARE\MR鍵下的測試子鍵
using Microsoft.Win32;namespace _05
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(118, 46),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "刪除",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(331, 99);Controls.Add(button1);Name = "Form1";Text = "Form1";}/// <summary>/// 打開"SOFTWARE"子鍵/// 打開MR子鍵/// 刪除名稱為測試的子鍵/// </summary>private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;RegistryKey? software = hklm?.OpenSubKey("HARDWARE", true);RegistryKey? no1 = software?.OpenSubKey("MR", true);no1?.DeleteSubKey("測試", false);MessageBox.Show("刪除成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

(2)DeleteSubKeyTree方法

????????DeleteSubKeyTree()方法用于徹底刪除指定的子鍵目錄,包括刪除該子鍵以及該子鍵以下的全部子鍵。由于此方法的破壞性非常強,所以在使用時要特別謹慎。語法如下:

public void DeleteSubKeyTree(sting subkey)
subkey:要徹底刪除的子鍵名稱。?

????????當刪除的項為null時,則觸發異常。

// 通過DeleteSubKeyTree()方法將徹底刪除
// HKEY_LOCAL_MACHINE\HARDWARE\MR鍵下的子鍵
using Microsoft.Win32;namespace _06
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(151, 12),Name = "button1",Size = new Size(121, 23),TabIndex = 0,Text = "徹底刪除子鍵",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(284, 111);Controls.Add(button1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";}/// <summary>/// 打開"SOFTWARE"子鍵/// 打開MR子鍵/// 刪除名稱為測試的子鍵/// </summary>private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;//hklm.DeleteSubKey("aaa", false);RegistryKey? software = hklm.OpenSubKey("HARDWARE", true);RegistryKey? no1 = software?.OpenSubKey("MR", true);no1!.DeleteSubKeyTree("測試");MessageBox.Show("刪除成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

(3)DeleteValue()方法?

????????DeleteValue()方法主要用于刪除指定的鍵值。語法如下:

publie void DeleteValue(string name)
name:要刪除的值的名稱。
如果在找不到指定值的情況下使用該值,又不想引發異常,可以使用DeleteValue(string name,bool?throwOnMissingValue)重載方法。如果throwOnMissingValue參數為true時,將不引發異常。
// 通過DeleteValue方法刪除
// HKEY_LOCAL_MACHINE\HARDWARE\MR\測試鍵下的名稱為value的鍵值
using Microsoft.Win32;namespace _07
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(132, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "刪除鍵值",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(219, 196);Controls.Add(button1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";}/// <summary>/// 打開"SOFTWARE"子鍵/// 打開MR子鍵,打開測試子鍵/// 刪除名稱為"value"的鍵值/// </summary>private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;RegistryKey? software = hklm?.OpenSubKey("HARDWARE", true);RegistryKey? no1 = software?.OpenSubKey("MR", true);RegistryKey? no2 = no1?.OpenSubKey("測試", true);no2?.DeleteValue("value");MessageBox.Show("刪除鍵值成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}    
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210204.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210204.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內外聯動——記建行江門鶴山支行營業部堵截一起新型騙局

建設銀行廣東省江門市分行&#xff08;以下簡稱“江門建行”&#xff09;認真貫徹落實黨中央、國務院決策部署&#xff0c;緊緊圍繞當地市委工作部署和上級行要求&#xff0c;扛牢國有大行責任&#xff0c;堅守金融工作的政治性、人民性&#xff0c;以深化新金融行動助力江門全…

javascript實現List列表數據結構

書籍推薦 有幸拜讀《數據結構與算法Javascript描述》這本書&#xff0c;先強烈安利一波&#xff01;非常感謝作者大大給我們前端領域帶來這本書。 全書從javascript的角度出發&#xff0c;簡單明了的分析了數據結構在javascript領域的實現過程與實際的應用案例&#xff0c;且…

postgres 登錄及常用命令

登陸 輸入以下命令&#xff0c;嘗試登錄psql: psql -U postgres 報告以下錯誤&#xff1a; psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres" 換成下面…

Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

報錯&#xff1a; OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performan…

差異計算基礎知識 - 了解期末業務操作、WIP 和差異

原文地址&#xff1a;Basics of variance calculation-Understanding Period End activities, WIP and Variances | SAP Blogs 大家好&#xff0c; 這是我在成本核算方面的第六份文件&#xff0c;旨在解釋期末的差異計算和相關活動。 我將引導您完成期末活動和差異計算。在本文…

MySQL char 尾隨空格丟失與右側空格填充

今天看《高性能MySQL(第四版)》,講char,varchar時說“當存儲CHAR值時&#xff0c;MySQL刪除所有尾隨空格。如果需要進行比較&#xff0c;值會用空格填充。”感覺這兩句話有沖突啊&#xff0c;便研究了下。 對于具體的問題&#xff0c;當然官方文檔是最好的&#xff0c;The CHAR…

【性能測試】Jmeter 配置元件(一):計數器

Jmeter 配置元件&#xff08;一&#xff09;&#xff1a;計數器 在 Jmeter 中&#xff0c;通過函數 ${__counter(,)} 可以實現每次加 1 1 1 的計數效果。但如果步長不為 1 1 1&#xff0c;則要利用到我們的計數器。 函數作用${__counter(,)}計數器&#xff0c;每次加 1${__d…

vue父子組件傳值

父組件向子組件傳值 1.在父組件中調用子組件時&#xff0c;定義要傳遞的參數 //使用子組件&#xff0c;并傳遞value作為prop<childComponent :childValue"parentValue"></childComponent>// 父組件的data中定義傳遞的參數data() {return {parentValue: &…

論文導讀|10月MSOM文章精選:智慧醫療

編者按 在“10月MSOM文章精選&#xff1a;智慧醫療”中&#xff0c;我們有主題、有針對性地選擇了MSOM期刊雜志中一些有關智慧醫療領域的有趣文章&#xff0c;不但對文章的內容進行了概括與點評&#xff0c;而且也對文章的結構進行了梳理&#xff0c;旨在激發廣大讀者的閱讀興趣…

c++--面向對象特性

1.面向對象指的是繼承&#xff0c;封裝&#xff0c;多態。 繼承主要關注類的構造&#xff0c;賦值&#xff0c;析構。 以下對多態&#xff0c;封裝進行補充說明。 2、多態 2.1.定義 a.賦值 派生類的指針&#xff0c;可以賦值給基類的指針。 派送類的對象&#xff0c;可以賦值給…

教師需要什么技能?

作為一名老師&#xff0c;需要掌握許多技能&#xff0c;以便能夠成功地教育和指導學生。以下是一些關鍵技能&#xff1a; 1.教學技能&#xff1a;老師需要有深入的學科知識和教學經驗&#xff0c;以便能夠有效地傳授知識。教師應該了解如何設計和執行教學計劃&#xff0c;制定課…

【Java基礎篇 | 面向對象】—— 聊聊什么是接口(下篇)

個人主頁&#xff1a;兜里有顆棉花糖 歡迎 點贊&#x1f44d; 收藏? 留言? 加關注&#x1f493;本文由 兜里有顆棉花糖 原創 收錄于專欄【JavaSE_primary】 本專欄旨在分享學習JavaSE的一點學習心得&#xff0c;歡迎大家在評論區交流討論&#x1f48c; 上篇&#xff08;【Ja…

SpringBoot 自動裝配原理詳解

什么是 SpringBoot 自動裝配&#xff1f; 我們現在提到自動裝配的時候&#xff0c;一般會和 Spring Boot 聯系在一起。但是&#xff0c;實際上 Spring Framework 早就實現了這個功能。Spring Boot 只是在其基礎上&#xff0c;通過 SPI 的方式&#xff0c;做了進一步優化。 Spr…

解決npm install時報:gyp ERR! configure error

報錯內容&#xff1a; npm ERR! gyp ERR! cwd C:\Users\zccbbg\code\my\examvue\node_modules\node-sass npm ERR! gyp ERR! node -v v16.13.1 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok npm ERR! Build failed with error code: 1 解決辦法&#xff1a;…

自行編寫一個簡單的shell!

本文旨在編寫一個簡單的shell外殼程序&#xff01;功能類似于shell的一些基本操作&#xff01;雖然不能全部實現shell的一些功能&#xff01;但是通過此文章&#xff0c;自己寫一個簡單的shell程序也是不成問題&#xff01;并且通過此文章&#xff0c;可以讓讀者對linux中一些環…

C#基礎面試題集

C#基礎 1. 簡述值類型和引用類型有什么區別2. C# String類型比 stringBuilder 類型的優勢是什么?3.面向對象的三大特點4.請簡述private&#xff0c;public&#xff0c;protected&#xff0c;internal的區別5.結構體和類6.請描述Interface與抽象類之間的不同7.在類的構造函數前…

藍橋杯:貨物擺放--因數存到數組里的技巧--減少運算量的方法

小藍有一個超大的倉庫&#xff0c;可以擺放很多貨物。 現在&#xff0c;小藍有 n 箱貨物要擺放在倉庫&#xff0c;每箱貨物都是規則的正方體。小藍規定了長、寬、高三個互相垂直的方向&#xff0c;每箱貨物的邊都必須嚴格平行于長、寬、高。 小藍希望所有的貨物最終擺成一個大…

go自帶rpc框架生產環境使用demo

基礎使用 序列化使用自帶gob協議 server package mainimport ("net""net/rpc" )// 定義一個handler結構體 type HelloService struct { }// 定義handler方法,大小寫&#xff0c;參數&#xff0c;返回值都是固定的&#xff0c;否則無法注冊 func (receiv…

數據庫事務:保障數據一致性的基石

目錄 1. 什么是數據庫事務&#xff1f; 1.1 ACID特性解析 2. 事務的實現與控制 2.1 事務的開始和結束 2.2 事務的隔離級別 3. 并發控制與事務管理 3.1 并發控制的挑戰 3.2 鎖和并發控制算法 4. 最佳實踐與性能優化 4.1 事務的劃分 4.2 批處理操作 5. 事務的未來發展…

Qt OpenCV 學習(文章鏈接匯總)

Qt OpenCV 學習&#xff08;一&#xff09;&#xff1a;環境搭建 Qt OpenCV 學習&#xff08;二&#xff09;&#xff1a;兩個簡單圖片識別案例 Qt OpenCV 學習&#xff08;三&#xff09;&#xff1a;跟蹤視頻中的運動物體 Qt OpenCV 學習&#xff08;四&#xff09;&#xff…