Tag: memory management

为什么要调用Dispose()? 内存泄漏不会发生?

编辑 :我的问题是没有得到我正在寻找的主要答案。 我不清楚。 我真的想知道两件事: 不能调用Dispose()导致内存泄漏? 如果你有一个大型程序并且从不在任何IDisposable对象上调用Dispose(),那么最糟糕的事情是什么? 我的印象是,如果没有在IDisposable对象上调用Dispose()可能会发生内存泄漏。 根据这个post的讨论,我的看法不正确; 如果未调用Dispose()则不会发生内存泄漏。 为什么要打扰调用Dispose()呢? 是否只是立即释放资源,而不是以后的某个时间? 如果你有一个大型程序并且从不在任何IDisposable对象上调用Dispose() ,那么最糟糕的事情是什么?

大对象堆压缩,什么时候好?

首先,有多大被认为是大的? 反正有没有确定一个对象在堆中的大小? .Net 4.5.1附带了这个LargeObjectHeapCompactionMode : 在将LargeObjectHeapCompactionMode属性设置为GCLargeObjectHeapCompactionMode.CompactOnce之后,下一个完全阻塞垃圾收集(以及LOH的压缩)将在不确定的未来时间发生。 您可以使用以下代码立即压缩LOH: GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; 从我所听到的,压缩LOH是件坏事! 那么哪一个最差? 紧凑型LOH或LOH碎裂?

Marshal.AllocHGlobal VS Marshal.AllocCoTaskMem,Marshal.SizeOf VS sizeof()

我有以下结构: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct WAVEHDR { internal IntPtr lpData; // pointer to locked data buffer internal uint dwBufferLength; // length of data buffer internal uint dwBytesRecorded; // used for input only internal IntPtr dwUser; // for client’s use internal uint dwFlags; // assorted flags (see defines) internal uint dwLoops; // loop control […]

String和Char类型如何在.NET中存储在内存中?

我需要存储一个语言代码字符串,例如“en”,它总是包含2个字符。 将类型定义为“String”或“Char”更好吗? private string languageCode; VS private char[] languageCode; 或者还有另一种更好的选择吗? 这些2如何存储在内存中? 分配值时,将为它们分配多少字节或位?

物体复活的用法

我的.NET Windows服务应用程序中存在内存泄漏问题。 所以我开始阅读有关.NET内存管理的文章。 我在Jeffrey Richter的一篇文章中找到了一个有趣的练习。 这个练习名称是“对象复活”。 它看起来像是将全局或静态变量初始化为“this”的位置代码: protected override void Finalize() { Application.ObjHolder = this; GC.ReRegisterForFinalize(this); } 我知道这是一个不好的做法,但我想知道使用这种做法的模式。 如果你知道,请写在这里。