Tag:

如何在.Net中列出堆中的所有托管对象?

是否可以列出存储在堆中的所有对象。 我想做这样的事情: IEnumerable listOfObjectsInHeap = GetListOfObjectsFromHeap();

C#中的字符串赋值

几周前,我发现C#中的字符串被定义为引用类型而不是值类型。 最初我对此感到困惑,但经过一些阅读后,我突然明白为什么将字符串存储在堆而不是堆栈上是很重要的 – 因为将非常大的字符串复制到不可预测的数字上会非常低效堆栈帧。 我完全接受了。 我觉得我的理解几乎已经完成了,但是我缺少一个元素 – 字符串用什么语言来保持它们不变? 用代码示例来说明: string valueA = “FirstValue”; string valueB = valueA; valueA = “AnotherValue”; Assert.AreEqual(“FirstValue”, valueB); // Passes 当我将valueA分配给valueB时,我不明白哪个语言function会复制valueA。 或者,当我将valueA赋值给valueB时,对valueA的引用不会改变,只有valueA在我设置字符串时获得对它自身的新引用。 由于这是一个实例类型,我不明白为什么这样做。 我知道你可以重载,例如,==和!=运算符,但我似乎找不到有关重载=运算符的任何文档。 解释是什么?

.NET中的堆栈与堆

在您的实际编程经验中,STACK和HEAP的这些知识如何在现实生活中拯救您? 来自战壕的故事? 或者这个概念是否适合填写编程书籍并有利于理论?

使用Delegates的局部变量

显然,这似乎不是最佳做法。 有人可以解释为什么它不是最佳实践或如何工作? 任何提供解释的书籍或文章将不胜感激。 //The constructor public Page_Index() { //create a local value string currentValue = “This is the FIRST value”; //use the local variable in a delegate that fires later this.Load += delegate(object sender, EventArgs e) { Response.Write(currentValue); }; //change it again currentValue = “This is the MODIFIED value”; } 输出的值是第二个值“已修改” 。 编译魔术的哪个部分使这个工作? 这跟跟踪堆上的值并稍后再次检索它一样简单吗? [编辑]:鉴于一些评论,改变原来的一些句子……

堆与堆栈分配的影响(.NET)

从关于堆和堆栈的SO回答 1中 ,它提出了一个问题:为什么知道变量的分配位置很重要? 在另一个答案,有人指出堆栈更快。 这是唯一的含义吗? 有人可以给出一个代码示例,其中简单的分配位置更改可以解决问题(例如,性能)? 请注意,此问题是特定于.NET的 1问题从SO中删除。