随机RAM使用量

时间:2010-04-19 18:48:03

标签: c# .net

我希望有人可以解释为什么我的应用程序在加载时会使用不同数量的RAM。我说的是直接使用exe的编译版本。这是一个非常基本的应用程序,在应用程序启动时没有条件分支。然而,每次启动时,RAM的容量都在6MB-16MB之间。

我知道这是在使用的小端,但我很好奇为什么会发生这种情况。

编辑:进一步澄清应用实际做了什么 这是一个WinForm项目 它使用sqlclient连接到数据库以检索服务器列表 根据该列表,可以创建一系列按钮来启动和停止这些服务器上的服务 使用System.Timers类每20秒审核这些服务器上的服务状态 此时的应用程序位于此处,并通过其中一个按钮单击等待用户输入以启动/停止服务。

3 个答案:

答案 0 :(得分:6)

这里的技巧是任务计划报告的RAM量您的应用程序使用的RAM量。相反,它是您的应用程序使用的RAM 保留的数量。

请记住,对于像.Net这样的托管框架,您不会直接请求或释放内存。相反,垃圾收集器为您管理内存。在给定时间为应用程序保留的内存量可能会有所不同,具体取决于不同因素的 lot ,包括其他程序当时创建的内存压力。

以这种方式思考:如果您的应用需要10 MB的RAM,请求更快并将其返回到操作系统1 MB,一次超过10个请求/发布,或者一次保留块请求/释放?现在将其扩展到您不确切知道需要多少RAM的情况,只是它在10 MB左右的某个地方。此外,您的计算机有1 GB未使用。当然,最好的办法是占用大量可用内存。即使是20或30 MB相对于那些未使用的RAM也不合理,因为未使用的RAM是浪费的性能。

如果您的系统后来开始感到内存压力,那么.Net可以轻松地将一些RAM返回给系统。这是托管语言有时提供更好性能的方式之一,而不是像传统内存管理的C ++这样的语言:垃圾收集器,在分配内存时可以更轻松地将整个系统运行状况考虑在内。

答案 1 :(得分:1)

您使用什么来确定“使用”了多少内存。即使使用常规应用程序,Windows也会提前积极地分配未使用的内存,使用.NET应用程序时,实际使用的内存量会更加复杂,以及Windows正在进行多少处理,以便在需要时立即可用。如果另一个应用程序实际请求内存,则此预留内存将被重新利用。

检查的一种方法是最小化应用程序(至少在XP上)。如果您正在查看任务管理器之类的内存使用情况,您会发现它立即下降,消除了分配的“随机”数量。

答案 2 :(得分:0)

它可能与抖动有关,在第一次加载之后抖动已经创建了一个编译版本而且它不需要运行。除此之外,您必须向我们提供有关应用程序的更多详细信息以及您所指的哪种内存。