如何在不分配内存的情况下测量.net app内存使用情况?

时间:2015-09-06 23:34:12

标签: .net wpf performance memory

我正在使用对性能敏感的WPF应用程序,并希望每秒为我的应用程序注销一些关键内存使用情况统计信息。我的总体目标是通过确保我的应用程序在运行时不分配(多)内存来尽可能避免垃圾收集的惩罚。

有很多关于如何通过性能计数器或当前进程的VirtualMemorySize64获取此信息的信息。

我的问题是,VS2013探查器告诉我这些调用本身正在导致大量的内存分配。

刚刚获得“Private Bytes”性能计数器的RawValue会导致在几秒钟内分配近3MB,并为VirtualMemorySize64的调用分配另外3MB。

是否有更高效的方法来获取这些数字?

2 个答案:

答案 0 :(得分:0)

运行其他流程以收集统计信息。

    public static void CollectStatInfo(int pid)
    {
        var memorySize = Process.GetProcessById(pid).PrivateMemorySize64;
    }

    static void Main(string[] args)
    {
        switch (args.FirstOrDefault())
        {
            case "--collect-stat-info":
                var pid = int.Parse(args.ElementAtOrDefault(1));
                CollectStatInfo(pid);
                return;
        }

        CollectStatInfoFromOtherProcess();

        //code
    }
    public static void CollectStatInfoFromOtherProcess()
    {
        Process.Start(new ProcessStartInfo()
            {
                Arguments = $"--collect-stat-info {Process.GetCurrentProcess().Id}",
                FileName = Assembly.GetExecutingAssembly().Location
            }
        );
    }

答案 1 :(得分:-1)

为什么不利用:

#tabs {
  border-style: none !important;
  font-family: Verdana, Arial, Tahoma, Helvetica, sans-serif !important;
  font-size: 11px !important;
}

.ui-tabs-panel {
  border: solid 1px #999999 !important;
  border-radius: 0;
}

.ui-tabs {
  padding: 0 !important;
}

.ui-tabs .ui-tabs-nav {
  padding: 0 !important;
  position: relative;
  z-index: 1000000;
}

.ui-tabs-panel.ui-widget-content.ui-corner-bottom {
  background-color: #FFFFFF;
  color: inherit;
  position: relative;
  z-index: 10000;
}

.ui-widget-header {
  background: #FFFFFF none;
  border-style: none;
  color: #000;
}

.ui-state-default.ui-corner-top.ui-tabs-active.ui-state-active {
  background: #FFFFFF url(http://www.ajaxcontroltoolkit.com/WebResource.axd?d=AGMZY7ihZMorR97dadZHJNLMLUmlGs1IAAjSSQojR1z9vDSKfu9AV_I6UDVbY3n0Ht_3wAr1PwDZxrII3qTy7PxBuhOrrMPPm9aSf0ez-2krTuMH79yQM5UqpVv2rfAWdUFEfP05ctyHi2tucBpF0FiqhM41&t=633679741330000000) repeat-x !important;
  border-top-style: none !important;
  color: inherit;
  line-height: 0.9 !important;
  padding-bottom: 1px !important;
  top: 0 !important;
}

.ui-state-default.ui-corner-top {
  background: #FFFFFF url(http://www.ajaxcontroltoolkit.com/WebResource.axd?d=W4v9Hy4fkzkekDThrsobfTYj6-95kfZ10KKihGm99tZbuY_l3ofA36Jei1gEbKSaOeuE25gPka1oqQEK41fBP_tQ6j-raNjx3bfPxbTWwS4G10LIvb5t08TYwcXm-kc2MlBhvw2&t=633679741330000000) repeat-x 0 -2px !important;
  border-left: solid 1px #999999 !important;
  border-right: solid 1px #999999 !important;
  border-top-style: none !important;
  color: inherit;
  line-height: 0.8 !important;
  top: 0.3em !important;
}

.ui-state-default.ui-corner-top:hover {
  background: #FFFFFF url(http://www.ajaxcontroltoolkit.com/WebResource.axd?d=LpBJhML_0RvVpH9_nzWpbHM55rqRzfQLP86L3zQcgsIDrNYrPJwDC8P6cl4iArkt1mQTADliJLb_tTeqLupEXRcRd0ap0pbeeoZeFS8-y23_1ZD_wYgfRv9KSLuWIAqaucbBhvH2h3cWoeoAGmGsp5xO7pU1&t=633679741330000000) repeat-x 0 -2px !important;
  border-left: solid 1px #999999 !important;
  border-right: solid 1px #999999 !important;
  border-top-style: none !important;
  color: inherit;
  line-height: 0.8 !important;
  top: 0.3em !important;
}

.ui-state-default.ui-corner-top.ui-tabs-active.ui-state-active a {
  padding: 8px 5px 4px 5px !important;
}

.ui-state-default.ui-corner-top a {
  padding: 7px 5px 4px 5px !important;
}

这些功能不需要任何内存费用。

我想您不需要监视,如此精细,您的内存(如私人字节,工作集等)和垃圾收集可以帮助您以良好的方式控制使用。