簡體   English   中英

以下情況之間有什么區別?

[英]What is the difference between following cases?

代碼在C#中

情況1

var p = new Person();
p = getPerson(p); 

情況二

var p = new Person();
getPerson(p);

在上述情況下,是否會消耗額外的內存?

假設getPerson只是修改Person屬性,並且有2種不同的方法(一種返回一個人,另一種是無效的),則此代碼沒有明顯的區別

static void Main(string[] args)
{

   // example 1
   var p = new Person();
   p = getPerson1(p);

   // example 2
   var p2 = new Person();
   getPerson2(p2);
}

例子1

IL_0001: newobj       instance void ConsoleApp8.Person::.ctor()
IL_0006: stloc.0      // p

// [33 10 - 33 28]
IL_0007: ldloc.0      // p
IL_0008: call         class ConsoleApp8.Person ConsoleApp8.Program::getPerson1(class ConsoleApp8.Person)
IL_000d: stloc.0      // p

例子2

IL_000e: newobj       instance void ConsoleApp8.Person::.ctor()
IL_0013: stloc.1      // p2

// [36 4 - 36 19]
IL_0014: ldloc.1      // p2
IL_0015: call         void ConsoleApp8.Program::getPerson2(class ConsoleApp8.Person)
IL_001a: nop          

OpCodes.Stloc字段

從評估堆棧的頂部彈出當前值,並將其存儲在指定索引處的本地變量列表中。

OpCodes.Nop字段

如果修補了操作碼,則填充空間。 盡管可能消耗處理周期,但沒有執行有意義的操作。


總之,擔心其他事情

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM