首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET EXE内存占用

.NET EXE内存占用
EN

Stack Overflow用户
提问于 2008-10-21 20:01:24
回答 3查看 26.4K关注 0票数 22

正如在任务管理器中看到的,即使是C#中的一个简单Notepad应用程序也会消耗兆字节的内存。在最小化应用程序时,任务管理器中的内存大小会大大降低,并在应用程序最大化时恢复。

我在某处读到,.NET进程预先为运行时分配保留了大量内存。这就是为什么.NET应用程序一开始就需要占用更多的内存。但是这个内存可以使用Win32应用程序接口调用来释放。权衡的是运行时分配变得很慢-这是真的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-21 20:06:20

占用大量内存的原因是进程正在加载即时编译器和Windows Forms引擎。要减少这种情况,可以执行以下操作:

代码语言:javascript
运行
复制
[DllImport("psapi.dll")]
static extern int EmptyWorkingSet(IntPtr hwProc);

static void MinimizeFootprint()
{
    EmptyWorkingSet(Process.GetCurrentProcess().Handle);
}

这应该会尽可能多地减少内存占用。可能有一种方法可以减少为运行时内存分配预留的内存量。

票数 37
EN

Stack Overflow用户

发布于 2008-10-21 20:20:17

不应使用TaskManager来测量.NET应用程序的内存占用。

当.NET应用程序启动时,它向操作系统请求一块内存,然后将其分段,以成为托管堆、堆栈和大对象堆。TaskManager报告的是这个总的内存块,它可能被.NET完全使用,也可能不被完全使用。一旦.NET应用程序被分配了一个内存块,它不会释放它,直到操作系统请求它,这只会发生在操作系统确定需要更多内存资源的情况下。

如果要测量内存分配,则需要查看各种性能监视器(PerfMon)计数器。

您可以使用互操作代码来调用Win32 API来调整您的工作集大小,但是当您的应用程序下一次向OS请求内存时,工作集将重新启动,并且在OS分配和分配额外的内存以及.NET运行时对其进行“配置”时,性能将受到影响。

票数 26
EN

Stack Overflow用户

发布于 2008-10-21 20:06:45

任务管理器不会显示.NET应用程序的实际内存使用情况。要看到这一点,你几乎必须在应用程序上放置一个性能计数器或使用分析器。

你在任务管理器中看到的是应用程序的工作内存,其中包括一堆框架本身的开销,当你的应用程序加载时,框架本身也必须加载。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/223283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档