C#使用非托管代碼直接修改字符串的方法
更新時(shí)間:2013年07月23日 10:13:57 作者:
在string方法中,如ToUpper等字符串操作方法,都會(huì)產(chǎn)生一個(gè)新的字符串,這樣增大了運(yùn)行開支。一個(gè)替代方案是通過(guò)非托管代碼直接操作字符串。如替代ToUpper方法:
復(fù)制代碼 代碼如下:
using System;
public class Test
{
public static void Main(string[] args)
{
string str = "hello";
ToUpper(str);
Console.WriteLine(str);
}
private static unsafe void ToUpper(string str)
{
fixed(char * pfixed = str)
for(char * p=pfixed;*p!=0;p++)
{
*p = char.ToUpper(*p);
}
}
}
fixed語(yǔ)句:
格式 fixed ( type* ptr = expr ) statement
它的目的是防止變量被垃圾回收器生定位。
其中:
type為非托管類型或void
ptr為指針名
expr為可以隱式轉(zhuǎn)換為type*的表達(dá)式
statement為可執(zhí)行的語(yǔ)句或塊
fixed語(yǔ)句只能在unsafe的上下文中使用,fixed 語(yǔ)句設(shè)置指向托管變量的指針并在 statement 執(zhí)行期間“鎖定”該變量。如果沒有 fixed 語(yǔ)句,則指向托管變量的指針將作用很小,因?yàn)槔厥湛赡懿豢深A(yù)知地重定位變量。
執(zhí)行完 statement 后,任何鎖定的變量都被取消鎖定并受垃圾回收的制約。因此,不要指向 fixed 語(yǔ)句之外的那些變量。在不安全模式中,可以在堆棧上分配內(nèi)存。堆棧不受垃圾回收的制約,因此不需要被鎖定。
但在編譯時(shí),因?yàn)槭褂昧朔峭泄艽a,必須要使用/unsafe才能通過(guò)。
相關(guān)文章
C#數(shù)據(jù)表格(DataGridView)控件的應(yīng)用案例
這篇文章主要介紹了C#數(shù)據(jù)表格(DataGridView)控件的應(yīng)用案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Unity 通過(guò)LineRenderer繪制兩點(diǎn)之間的直線操作
這篇文章主要介紹了Unity 通過(guò)LineRenderer繪制兩點(diǎn)之間的直線操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量一
本節(jié)課我們將學(xué)習(xí)C#編程語(yǔ)言的數(shù)據(jù)類型,數(shù)據(jù)類型可以分為值類型和引用類型,接著介紹變量的使用方法和作用域等內(nèi)容,為了方便大家理解,我們還會(huì)舉一些小例子作為說(shuō)明。2015-10-10
采用C#代碼動(dòng)態(tài)設(shè)置文件權(quán)限
在開發(fā)中,我們經(jīng)常會(huì)使用IO操作,例如創(chuàng)建,刪除文件等操作。在項(xiàng)目中這樣的需求也較多,我們也會(huì)經(jīng)常對(duì)這些操作進(jìn)行編碼,但是對(duì)文件的權(quán)限進(jìn)行設(shè)置,這樣的操作可能會(huì)手動(dòng)操作,本文介紹一種采用代碼動(dòng)態(tài)對(duì)文件設(shè)置權(quán)限的操作。2016-12-12

