第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不盡可能使用“in”作為方法參數(shù)?

為什么不盡可能使用“in”作為方法參數(shù)?

C#
郎朗坤 2022-08-20 15:53:59
在 C# 中,我們可以指定結(jié)構(gòu)方法參數(shù),以便將它們作為只讀引用傳遞:inpublic int TimesTwo(in int number){    return number * 2;}這與 使用 幾乎相同,但不允許修改參數(shù):refpublic int TimesTwo(in int number){    number *= 2; // Compiler error    return number;}此外,它不需要在調(diào)用時指定關(guān)鍵字,就像:refvar x = 1;var y = TimesTwo(x);var z = TimesTwo(in x);// y and z are both 2在某些情況下,這是不可能的,例如當您需要修改參數(shù)或使用不允許的異步或迭代器方法時。但問題是,在99%的情況下,參數(shù)只是被讀取,那么為什么不指定in呢?in如果未指定,則傳遞的參數(shù)將復制到局部變量。這種復制可能需要一些時間,對于緊密循環(huán)中的大型結(jié)構(gòu)來說,這可能是明顯的,正如微軟在這里所說的那樣。in使用 ,則傳遞引用,因此不會發(fā)生復制。也許在大多數(shù)情況下,不復制所節(jié)省的時間可以忽略不計,但我想知道除了標準的“它使代碼混亂”或“這是一個你不應該擔心的微優(yōu)化”之外,是否有任何原因。in據(jù)我所知,這種繞過結(jié)構(gòu)復制的“微優(yōu)化”正是引入的原因。還有其他原因可以解釋為什么將其放在任何地方用于性能關(guān)鍵代碼都是不好的做法嗎?in
查看完整描述

1 回答

?
繁花不似錦

TA貢獻1851條經(jīng)驗 獲得超4個贊

它也有利于緊密耦合。例如,MSDN 中的以下方法 (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/in-parameter-modifier):


static void Method(in int argument)

{

    // implementation removed

}


Method(5); // ok

Method(5L); // CS1503: no implicit conversion from long to int

這是一個有趣的優(yōu)化鏈接(我復制了他們的結(jié)果),它討論了,和:https://faithlife.codes/blog/2017/12/in-will-make-your-code-slower/readonly structreadonly refin


Method                  Mean

PointByValue            25.09 ns

PointByRef              21.77 ns

PointByIn               34.59 ns  // our guy

ReadOnlyPointByValue    25.29 ns

ReadOnlyPointByRef      21.78 ns

ReadOnlyPointByIn       21.79 ns

Image caption 一些進一步的閱讀(圖片來源:Jon Skeet):


微觀優(yōu)化:只讀場的驚人低效率


https://codeblog.jonskeet.uk/2014/07/16/micro-optimization-the-surprising-inefficiency-of-readonly-fields/


查看完整回答
反對 回復 2022-08-20
  • 1 回答
  • 0 關(guān)注
  • 110 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號