【问题标题】:How to calculate memory usage of my code to findout the best way C#? [duplicate]如何计算我的代码的内存使用情况以找出 C# 的最佳方式? [复制]
【发布时间】:2016-11-16 05:35:12
【问题描述】:

我正在做一个服务应用程序,它将持续运行,因为我需要注意我的代码中的内存使用情况。

我正在使用 Stopwatch 类来计算代码性能,

例如)返回值与 Out 参数 - 我只是使用具有更高迭代次数的 for () 循环来计算它,发现 Out 参数比方法返回值花费的时间更少。

            int Iterations = 10000000;
            Stopwatch sw = Stopwatch.StartNew();
            for (int i = 0; i < Iterations; i++)
            {
                BigStruct bs = ReturnValue();
                total += bs.dec1;
            }
            sw.Stop();
            Console.WriteLine("Using return value: {0}",
                              sw.ElapsedMilliseconds);

            sw = Stopwatch.StartNew();
            for (int i = 0; i < Iterations; i++)
            {
                BigStruct bs;
                OutParameter(out bs);
                total += bs.dec1;
            }
      `Console.WriteLin`e("Using out parameter: {0}",sw.ElapsedMilliseconds);

同样, 我想计算我的代码的内存使用量,同时将位图数组作为值类型参数传递给另一个方法时占用了多少内存。 所以我可以找出高内存使用情况并相应地更改我的代码。

所以这将极大地帮助我找到最好的方法,而不是用谷歌搜索。

谢谢。

【问题讨论】:

  • @Mitch wheat,这是为了获得完整的进程内存使用率,我以前知道。但我想在这里做的是,计算。找出特定代码 sn-ps 的内存使用情况。
  • @Wheat,但是它不会显示正确的内存使用情况,是否有任何调试工具可以实现相同的效果?
  • VS2015 诊断工具有堆分析器。这不完全是你想要的,但我认为你不能比 GCed 环境中的堆分析做得更好

标签: c# memory


【解决方案1】:

具有自动内存管理(垃圾收集)的系统中的内存消耗。

在一种情况下,应用程序可能会产生很多未处理的对象,而 GC 不会释放它们。在其他情况下,GC 可以积极地释放内存。所以应该把GC作为主动部分来考虑。

int[] gccounts = new int[GC.MaxGeneration + 1];
for (int i = 0; i &lt;= GC.MaxGeneration; i++)
    gccounts[i] = GC.CollectionCount(i);

【讨论】:

  • 我没有正确理解你。请解释
  • 您可以查看here了解更多信息
  • 实际上我的情况是,从数据库中读取数据集并提取相同的数据并将 svg 文件转换为图像,然后需要将邮件发送给收件人。为此,我还有 4 个方法,并将结构和数据集、位图数组传递给每个方法。由于它是一个全职服务应用程序,我需要注意内存和性能。上面的代码也在高优先级线程中运行。如果我将它完全放在单一方法中,那么它可能看起来很难看并且不符合编码标准。请建议
  • 对不起,我也是一个新人,因为我已经执行了内存查找程序,但我没有深入了解,过去 3 个月我正在执行 c#
  • 好的,感谢您的宝贵时间。
猜你喜欢
  • 2014-06-03
  • 2011-09-05
  • 1970-01-01
  • 2011-01-17
  • 2010-10-16
  • 2015-09-29
  • 2018-03-22
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多