Windows Phone应用程序(ARM)上的性能消息
本文关键字:性能 消息 ARM Phone 应用程序 Windows | 更新日期: 2023-09-27 18:25:10
我想为我的应用程序性能测量创建一个工具,我可以把它放在某个部分,它会在开始和结束时使用时间戳,然后它会写入日志来记录时间增量。
然而,我不希望在我的生产版本中使用此功能(我希望在生产版的编译中排除这些测量)-我只希望它们处于调试模式。。。
我看过几个AOT库,比如Postsharp,但它们很贵,而且大多数(包括Postsharp)都不支持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
}
}