当前位置: 首页 > 面试题库 >

如何使用C#来衡量内存使用情况(就像我们在Java中那样)?

凌翔宇
2023-03-14
问题内容

我正在尝试在C#程序中测量内存使用情况。

我想知道这个Java函数的C#等效项:

ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getCommitted()

代表为堆 分配 的总内存。我需要此信息来了解为我的C#程序分配的内存总大小。

然后在Java中,我可以通过以下方式获得使用的内存:

ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()

目前,我在C#中使用它来获取已使用的内存:

Process_Memory = MyProcess.PrivateMemorySize64;

但是我不能完全确定是否等同。

因此,在简历中,如何在时间 t 获得C#应用程序的总分配空间以及当前使用空间?

编辑:

从答案和进一步的研究中,我确定了这一点:

当前正在使用的内存

System.GC.GetTotalMemory(false);

给出当前在托管内存中分配的字节数。(http://msdn.microsoft.com/fr-
fr/library/system.gc.gettotalmemory.aspx

该方法返回一个值较低,而我敢肯定它不是真正使用的所有内存的表示,我可以用得到getUsed()Java的
。在同一应用程序的Java中,使用的内存从5MB开始,最大达到125MB。使用C#,使用上述方法可以获得1到5 MB的内存。

看起来 :

MyProcess.PrivateMemorySize64; // return ~=25MB

要么

MyProcess.WorkingSet64;  //return ~=20MB

提供所有正在使用的内存的更准确的值。但我不知道该用哪一种…

对于 全局分配的内存,
本文建议使用:

Process_MemoryEnd1 = MyProcess.VirtualMemorySize64;

它在程序中 始终 返回 相同的值 ,与Java相比大约为169MB,这似乎是合理的:最大64MB至170MB

我仍在寻找准确的答案,我发现所有内容都非常模糊,并且我对Windows内存管理不是很熟悉,我不确定要理解我发现的文档:/


问题答案:

GC静态类提供了所有这种类型的信息。

您大概之后GC.GetTotalMemory()

编辑:

我相信,尝试根据当前植根的对象来锻炼您的内存占用量。如果您希望为进程分配的总大小(即包括可用缓冲区)使用Process该类。例如:

Process.GetCurrentProcess().WorkingSet64;


 类似资料:
  • 问题内容: 是否有一个准则来估计a消耗的内存量? 寻找类似于这些准则的估计内存使用情况的东西。 问题答案: 如果您查看源代码中的字段,则有: 的评论说 用于存储规范的字符串表示形式(如果已计算)。 假设您不调用,它将保留为零字节。因此是(8 + 4 + 4)= 16个字节+ 。 本身是4 + 4 + 4 + 4 + 4 = 20字节+ 。 20 + 16总共提供了36个字节加上大小,该大小始终是表

  • 问题内容: 您如何衡量Linux中应用程序或进程的内存使用情况? 从了解Linux上的内存使用的博客文章中可以看出,这不是用于此目的的准确工具。 为什么是“错” 根据您的看法,它不会报告进程的实际内存使用情况。它的真正作用是显示 如果 每个进程 是唯一运行的进程 , 则 每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都运行着几十个进程,这意味着报告的VSZ和RSS编号几乎

  • 问题内容: 我知道Valgrind,但它只是检测内存管理问题。我要搜索的是一个概述的工具,程序的哪些部分确实消耗了多少内存。带有树形图的图形表示(就像KCachegrind对Callgrind所做的那样)会很酷。 我在Linux机器上工作,所以Windows工具对我没有太大帮助。 问题答案: 使用massif,这是Valgrind工具的一部分。massif- visualizer 可以帮助您绘制数

  • 问题内容: 有什么工具可以知道我的Java应用程序已使用了多少个本机内存?我的应用程序内存不足:当前设置是:-Xmx900m 计算机,Windows 2003 Server 32位,RAM 4GB。 还在Windows上将boot.ini更改为/ 3GB,会有什么不同吗?如果设置为Xmx900m,则可以为此进程分配多少最大本机内存?是1100m吗? 问题答案: (就我而言,我使用的是Java 8)

  • 问题内容: 在一次采访中,我被要求计算内存使用量,如果其中有200万个项目,则估计将消耗多少内存。 例如: 映射是这样的。 我如何估计Java中此HashMap对象的内存使用情况? 问题答案: 简短的答案 为了找出对象的大小,我将使用探查器。例如,在YourKit中,您可以搜索对象,然后获取它以计算其深度大小。这将使您很清楚地知道如果对象是独立的,则使用多少内存,并且该对象的大小是保守的。 怪癖

  • 问题内容: 扩展基类时,Java中的内存使用情况如何。 子类是否包含基类的实例(具有其自身的开销和全部开销),还是仅具有其自身的16字节的开销? 那么,更具体地说,Bar实例的内存使用量是多少? 是吗 要不就 问题答案: 没有双重开销。 Java将采用该类,超类,计算所有字段所需的空间,并为一个实例分配所需的空间。 仅从内存的角度来看,根本不存在超类的概念,有Foo的实例仅需要一个int的内存,而