Tag: 内存管理

.NET中集合的内存分配

这可能是一个骗局。 我没有找到足够的信息。 我正在讨论.Net中集合的内存分配。 集合中分配的元素的内存在哪里? List myList = new List(); 变量myList在堆栈上分配,它引用在堆上创建的List对象。 问题是当int元素添加到myList时,它们将在何处创建? 谁能指出正确的方向?

Properties是否会增加Instances的内存大小?

这可能是一个愚蠢的问题,但对象属性是否占用每个实例的任何内存? 正如我在实例化一个对象时所理解的那样,每个值字段占用它的大小,引用字段类型每个字段有4个字节。 但是假设你有一个具有1000个属性的对象,这些属性通过其他对象获取数据,这些属性是否会占用任何内存? 自动属性自然会做,因为它只是语法糖,但它似乎不像普通属性应…

.NET对象大小

.net中堆分配对象的大小是多少,包括管理开销? 我假设对象是沿着4字节边界分配的,还是使用了不同的方法?

C#中的固定语句

在我们的一个项目中,我们有类似的代码。 任何人都可以解释(简单英语)为什么需要修复语句? class TestClass { int iMyVariable; static void Main() { TestClass oTestClass = new TestClass(); unsafe { fixed (int* p = &oTestClasst.iMyVariable) { *p = 9; } } } }

显示对象的引用值

在C ++中,显示指向对象的指针的实际值非常简单。 例如: void* p = new CSomething(); cout << p; 有没有办法在.NET中做这样的事情? 这样做的价值只能是教育性的,例如为了示范的目的,就像为学生展示价值而不仅仅是比较参考相等或无效(无)来certificate浅层副本,不变性等。

IDisposable.Dispose()实现应该是幂等的吗?

Microsoft.NET框架提供了IDisposable接口,该接口需要实现void Dispose()方法。 其目的是实现IDisposable实现可能已分配的昂贵资源的手动或基于范围的发布。 示例包括数据库集合,流和句柄。 我的问题是,如果Dispose()方法的实现是幂等的 – 当在同一个实例上多次调用时,实例只能被“处置”一次,后续调用不会抛出exception。 在Java中,大多数具有相似行为的对象(作为示例再次出现流和数据库连接)对于close()操作是幂等的,这恰好是Dispose()方法的模拟。 但是,我个人使用.NET(特别是Windows Forms)的经验表明,并非所有实现(它们都是.NET框架本身的一部分 )都是幂等的,因此后续调用这些实现会抛出ObjectDisposedException 。 这真的让我对如何处理一次性对象的实现感到困惑。 该场景是否有共同的答案,还是取决于对象的具体上下文及其用法?

具有自动记忆清洁function的图像下载器

我有一个列表(简单ListBox)的项目与主要细节基础上的图像(如果用户点击列表项,详细信息页面打开)。 我在这里 , 这里 , 这里和这里描述了图像内存泄漏的相当着名的问题。 一种可能的方法是在NavigatingFrom 和清理它们时浏览所有图像 。 在其中一个线程中 ,我找到了更有趣的解决方案:它自动清理图像,但这不适用于虚拟化(图像丢失或混合,如果添加私有字段用于存储ImageSource)。 建议的解决方法是添加依赖项属性。 但是我仍然面临同样的问题:图像在向下滚动并返回后混淆了。 看起来依赖属性是随机改变的,但我不能抓住他们改变的那一刻。 public class SafePicture : ContentControl { public static readonly DependencyProperty SafePathProperty = DependencyProperty.RegisterAttached( “SafePath”, typeof(string), typeof(SafePicture), new PropertyMetadata(OnSourceWithCustomRefererChanged)); public string SafePath { get { return (string)GetValue(SafePathProperty); } set { SetValue(SafePathProperty, value); } } private static void OnSourceWithCustomRefererChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { […]

如何确定程序当前占用的内存量

与我之前的问题相关: 处理大量文本时防止内存问题 有没有办法确定我的程序占用多少内存空间? 我最终处理了大量的文本文件,并且通常将处理过的对象存储在内存中。 有时会有太多的信息,我会耗尽内存。 我有一个避免内存分配问题的解决方案,但我只想在必要时使用它,以避免分页,这将最终降低我的性能,如果没有必要。 有没有办法弄清楚我占用了多少内存,以便我只在必要时才能分页信息? 注意:我正在寻找一个解决方案,我的程序可以利用它在必要时开始分页。

你可以阻止内存被交换到磁盘吗?

我想知道是否有可能防止对象(类或结构)的内存被交换到磁盘? 编辑:至于为什么我被告知我将要使用的一些数据无法写入磁盘。 我不希望它留下足够长的时间来换掉数据但是认为值得检查。

.NET Max Memory即使对于x64程序集也使用2GB

我读过( http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx).NET中对象的最大大小是2 GB。 我是否正确假设如果我有一个占用256 MB内存的对象,因为它是一个引用类型,我可以拥有这些256 MB对象的数组,其中所有对象一起可能占用> 2GB内存,只要大小引用数组的值是否低于2 GB?