Windows Phone应用程序(ARM)上的性能消息

本文关键字:性能 消息 ARM Phone 应用程序 Windows | 更新日期: 2023-09-27 18:25:10

我想为我的应用程序性能测量创建一个工具,我可以把它放在某个部分,它会在开始和结束时使用时间戳,然后它会写入日志来记录时间增量。

然而,我不希望在我的生产版本中使用此功能(我希望在生产版的编译中排除这些测量)-我只希望它们处于调试模式。。。

我看过几个AOT库,比如Postsharp,但它们很贵,而且大多数(包括Postsharp)都不支持ARM架构。

任何帮助都将不胜感激。

Windows Phone应用程序(ARM)上的性能消息

我不确定你到底在问什么。如果你能为这个任务构建自己的类,那就去做吧

这是性能测量类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
    public class PerfLibTest
    {
#if DEBUG
        private DateTime dtStarted;
#endif
        public void StartIt()
        {
#if DEBUG
            dtStarted = DateTime.Now;
#endif
        }
        public void StopAndLogIt()
        {
#if DEBUG
            //write somewhere (DateTime.Now-dtStarted).TotalMilliseconds
#endif
        }
    }
}

这就是要测量函数的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
    public class CLassToTest
    {
        public void DoSomeJob()
        {
            PerfLibTest pf = new PerfLibTest();
            pf.StartIt();
            // do some job
            pf.StopAndLogIt();
        }
    }
}

条件

#if DEBUG

将帮助您从RELEASE版本中排除测量值。

最终我得到了这样的东西,当你不在调试中时,它是一个singletone,当你在调试时是正常的instanse:用法:

using(PerfMesureHandler.Get("Something to meassure")))
{
    //Code to measure
}

代码:

    public class PerfMesureHandler: IDisposable
        {
            private PerfMesureHandler(string topic, string methodName , int lineNumber )
            {
    #if DEBUG
                _methodName = methodName;
                _lineNumber = lineNumber;
                _topic = topic;   
                _stopwatch = new Stopwatch();
                _stopwatch.Start();
    #endif
            }
            private string _topic;
            private static PerfMesureHandler_singleton;
            private Stopwatch _stopwatch;
            private int _lineNumber;
            private string _methodName;

            public static PerfMesureHandler Start(string topic, [CallerMemberName] string methodName = "", [CallerLineNumber] int lineNumber = 0)
            {
                PerfMesureHandler= null;
    #if DEBUG
                result = new PerfMesureHandler(topic, methodName, lineNumber);
    #else
                if (_singleton == null)
                {
                    _singleton = new PerfMesureHandler(topic, methodName, lineNumber);
                }
                result = _singleton;       
    #endif
                return result;
            }
        public void Dispose()
        {
#if DEBUG
            _stopwatch.Stop();
            //Write to log...
            string msg = $"topic: {_topic}, time:  {_stopwatch.ElapsedMilliseconds}, method: {_methodName}, line: {_lineNumber}";
            Console.WriteLine(msg)
#endif
        }        

}