即存储在堆栈上的值类型数据结构的名称是什么,它引用堆上的对象?
即对象引用是System.What(如果有的话)?
我知道这不是指针,不是吗?
我知道它"像"一个指针.
我知道它是"垃圾收集器所有".
我非常相信当你实例化一个对象(即一个引用类型)时,IL会给CLR指令以在内存中分配"堆栈引用/堆值对"(例如
...
.locals init ([0] int32 i1,
[1] object o1,
[2] int64 l1)
IL_0000: nop
IL_0001: ldc.i4.4
IL_0002: stloc.0
IL_0003: newobj instance void [mscorlib]System.Object::.ctor()
IL_0008: stloc.1
IL_0009: ldloc.0
IL_000a: box [mscorlib]System.Int32
...
Run Code Online (Sandbox Code Playgroud)
),并且在语言或IL级别上无法访问实际引用(复制/分配给新引用或操作引用对象除外),并且CLR/CLI和CLR创建和管理对象引用的分配将OBJECTREF DWORD值注入堆栈(或类似).
请让我直截了当,并为所有图书作者和谷歌搜索结束这一点.
谢谢!
我正在测试Linq扩展方法的性能变化,我遇到了一个奇怪的情况.
当执行返回测试时,首先调用Count()将返回1,后续的Any()为false.
首先调用Any()时,它为true,后续Count()为0.
在调用任一方法之前的断点检查显示有1个项目符合预期,但枚举在以这种方式枚举后或通过调用Any()或Count()后为空.
有人可以解释这种行为吗?由于延迟执行的一些警告,我的实现中是否存在错误?
public class Thing
{
public Guid Id { get; set; }
}
[TestClass]
public class IEnumerableExtensionsTests
{
Guid[] thingKeys = new Guid[1] { Guid.Parse("11A1AA1A-1A11-A111-AA11-111111AA1A11") };
System.Collections.ObjectModel.Collection<Thing> things= new System.Collections.ObjectModel.Collection<Thing>();
int additionalThingCount = 100;
[TestMethod]
public void TestIntersect1()
{
DateTime start = DateTime.Now;
var exceptionsList = things.Intersect1(thingKeys, (e) => e.Id);
//int count1 = exceptionsList.Count();
//Assert.AreEqual<int>(thingKeys.Length, count1);
bool any1 = exceptionsList.Any();
int count2 = exceptionsList.Count();
bool any2 = exceptionsList.Any();
string key = thingKeys[0].ToString();
var first = exceptionsList.FirstOrDefault(); …Run Code Online (Sandbox Code Playgroud)