Tag:

从堆列中获取数组而不分配堆

我有一个列表,我想将其数组分配给一个属性。 public void BuildMesh(List list){ mesh.vertices=list.ToArray(); } 现在的问题: 该项目是游戏,并且在垃圾收集方面非常困难,因此ToArray()的默认实现不是一个选项,因为它在列表的内部数组旁边创建了一个新数组。 网格对象来自闭源API,顶点属性是Vector3 [],因此无法为其指定指针。 我有任何阻止堆分配的选项吗? 编辑:这不是重复 不能使用IList 。 网格来自一个封闭的源API,需要Vector3 [],所以我不能为它分配IList 。

如何在.NET对象堆中存储值类型数组?

在.NET中,诸如int之类的值类型对象存储在内存中。 引用类型对象需要为引用和对象单独分配内存,并且对象存储在.NET对象堆中。 并且在堆中创建了数组,那么如何在堆中存储诸如int []之类的值类型数组? 是否意味着值类型对象可以存储在堆中而不需要装箱?

堆栈和堆在c锐利

可能重复: 当类存储在堆(.NET)上时,为什么结构存储在堆栈中? 任何人都可以告诉我如何分配内存以确定哪个对象存储在堆栈中以及哪些对象存储在内存的堆部分中?

C#大对象和堆

我对堆中大对象的存储感到有点困惑。比如对象的大小是多大? 什么类型更可能被视为大型对象?是否有适合管理此类对象的明确碎片方法。

.NET中的堆类

可能重复: c#中的Fibonacci,Binary或Binomial堆? 在.NET中是否有像堆这样的类? 我需要某种收集,我可以从中检索最小值。 元件。 我只想要3种方法: 加() RemoveMinElement() GetMinElement() 我不能使用排序列表,因为键必须是唯一的,我可能有几个相同的元素。

C# – 垃圾收集

好的,所以我理解堆栈和堆(堆栈上的值,堆上的引用)。 当我声明一个类的新实例时,它会存在于堆上,并在堆栈的内存中引用此点。 我也知道C#是自己的垃圾收集(即它确定何时不再使用实例化的类并回收内存)。 我有两个问题: 我对垃圾收集的理解是否正确? 我可以自己做吗? 如果是这样,我自己这样做有什么好处,或者我应该离开它。 我问,因为我在For循环中有一个方法。 每次循环时,我都会创建一个新类的实例。 在我的脑海中,我想象所有这些类在堆里面,除了占用记忆之外什么都不做,我想尽可能快地摆脱它们以保持干净整洁! 我是正确地理解这个还是我错过了什么?

c#structs / classes stack / heap control?

所以在c ++中它很容易。 你想要在堆上分配任何类/结构,使用new。 如果你想要它在堆栈上,不要使用新的。 在C#中,我们总是使用new关键字,并且根据它是结构还是类,它在堆栈或堆上分配(结构转到堆栈,堆到类) – 在某些应用程序中可以有更改设计时的巨大性能差异,只有那些对象才能进入真正属于那里的堆。 我想知道的是 – 是否有一种直接的方法来控制对象的分配位置,与它是否被声明为struct或class无关? 我知道值类型(结构)可以装箱去堆(但装箱/拆箱会带来性能成本)。 有没有办法在堆栈上分配类? 此外,是否有任何机制来分配原始内存并使用像C ++中的placement new这样的东西? 我知道这打破了被管理的想法 – 但如果你可以使用自定义内存管理,它可以产生很大的性能差异。 我喜欢C#因为它的便利性,因为它是垃圾收集器和其他东西 – 但有时候,当处理应用程序的瓶颈时,可能希望能够更好地控制实际发生的事情。 任何提示/提示欢迎:) 编辑:性能示例: struct Foo1 { public int i; public float f; public double d; } struct Foo2 { public Foo1[] bar; public void Init(){ bar = new Foo1[100]; for (int i = 0; i […]

如何在堆栈上分配数组以获得性能提升?

一些最佳版本的函数,如popcount和count consecutive zeros使用表查找来获得最终答案。 在C和C ++中,可以在堆栈上分配数组并快速访问它们。 有没有办法在C#中做到这一点? 据我所知, stackalloc只能在函数中使用,因此数组不会持久存在。 我有一个小的查找表,我希望能够尽快访问,因此更愿意在堆栈而不是堆上分配它。

.NET – 函数变量存储在地址空间中的堆或堆栈上?

我在考试中遇到了以下问题: 当程序调用一个函数时,哪种类型的数据结构是为该函数中的变量分配的内存? 堆 队列 LIFO 堆 根据测试,虽然我选择了STACK,但HEAP是正确的答案。 有人可以在那里出色的人解释原因吗? 提前致谢。

在回收价值类型统一是否有一点

我发现文章说回收和重用变量是团结的好习惯。 所以我采纳了它。 但有一点不清楚:这是否适用于值类型变量(整数,向量)? 有没有一点我使用这个: int x; Vector3 v; void functionCalledVeryOften(){ x=SomeCalculation(); v=SomeCalc(); //do something with x and v } 而不是这个: void functionCalledVeryOften(){ int x=SomeCalculation(); Vector3 v=SomeCalc(); //do something with x and v }