C# 如何计算C中方法的时间
例如,我如何计算3种方法的时间,但这只是我需要时间的第一种和最后一种方法。我不需要时间在中间的方法。 例如,方法一需要200毫秒,方法二需要500毫秒,方法三需要300毫秒。总时间:1000毫秒。但它应该是1000毫秒–500毫秒方法二=500毫秒 有什么软件可以做到这一点吗?或者如何更改代码以使其正常工作C# 如何计算C中方法的时间,c#,visual-studio,C#,Visual Studio,例如,我如何计算3种方法的时间,但这只是我需要时间的第一种和最后一种方法。我不需要时间在中间的方法。 例如,方法一需要200毫秒,方法二需要500毫秒,方法三需要300毫秒。总时间:1000毫秒。但它应该是1000毫秒–500毫秒方法二=500毫秒 有什么软件可以做到这一点吗?或者如何更改代码以使其正常工作 static void Main(string[] args) { Console.WriteLine("============================"); Consol
static void Main(string[] args)
{
Console.WriteLine("============================");
Console.WriteLine(" Performance ");
Console.WriteLine("============================\n");
Console.WriteLine("Total time: {0}", TimeTaking(MethodOne).TotalMilliseconds.ToString());
Console.ReadKey();
}
static TimeSpan TimeTaking(Action methodName)
{
Stopwatch stopwatch = Stopwatch.StartNew();
methodName();
stopwatch.Stop();
return stopwatch.Elapsed;
}
static void MethodOne()
{
Thread.Sleep(200);
MethodTwo();
}
static void MethodTwo()
{
// Stop TimeTaking
Thread.Sleep(500);
MethodThree();
}
static void MethodThree()
{
// continue TimeTaking
Thread.Sleep(300);
}
如果没有单独的分析工具,您必须在MethodOne和MethodThree中使用秒表手动测量时间。无法自动执行此操作。如果没有单独的分析工具,您必须使用MethodOne和MethodThree中的秒表手动测量时间。无法自动执行此操作。如果线程安全不是问题,您可以将秒表置于计时方法之外。这允许您在方法开始或结束时在所需的位置调用Stop和Start
当然,您可以将秒表作为参数传递。或者让everything返回一个int/long,其中包含运行所需的毫秒数。这两种解决方案都非常难看,因为它要么添加一个额外的参数,要么强制输出参数,以防返回有用的值。如果线程安全不是问题,则可以将秒表置于计时方法之外。这允许您在方法开始或结束时在所需的位置调用Stop和Start
当然,您可以将秒表作为参数传递。或者让everything返回一个int/long,其中包含运行所需的毫秒数。这两种解决方案都非常难看,因为它要么添加一个额外的参数,要么强制输出参数,以防您想要返回一个有用的值。这里有许多选项 您可以在操作中使用a来了解这些方法的持续时间。当然,这是重复的代码,即使您将实际的秒表逻辑代码放在单独的方法中,但可能足以满足您的需要 或者,您可以使用来执行此操作,如果您在所有方法中都需要此行为,则可以避免重复代码。但是,您必须将代码组织得更加模块化,这也使得它更易于测试:
[LogExecutionTimeAttribute]
void MethodOne()
{
Thread.Sleep(200);
}
void MethodTwo()
{
Thread.Sleep(500);
}
[LogExecutionTimeAttribute]
void MethodThree()
{
Thread.Sleep(300);
}
void StartFlow()
{
MethodOne();
MethodTwo();
MethodThree();
}
不确定为什么需要它们是静态的,应该避免
最后,像AppDynamics这样的APM工具也可以做到这一点,但对您来说可能有些过头了。这里有许多选项 您可以在操作中使用a来了解这些方法的持续时间。当然,这是重复的代码,即使您将实际的秒表逻辑代码放在单独的方法中,但可能足以满足您的需要 或者,您可以使用来执行此操作,如果您在所有方法中都需要此行为,则可以避免重复代码。但是,您必须将代码组织得更加模块化,这也使得它更易于测试:
[LogExecutionTimeAttribute]
void MethodOne()
{
Thread.Sleep(200);
}
void MethodTwo()
{
Thread.Sleep(500);
}
[LogExecutionTimeAttribute]
void MethodThree()
{
Thread.Sleep(300);
}
void StartFlow()
{
MethodOne();
MethodTwo();
MethodThree();
}
不确定为什么需要它们是静态的,应该避免
最后,像AppDynamics这样的APM工具也可以做到这一点,但对您来说可能有些过头了。我编写了这段代码来进行一些简单的测量:
public class Timer : IDisposable
{
private readonly Stopwatch _stopwatch;
private readonly Action<TimeSpan> _finishedDelegate;
private Timer(Action<TimeSpan> finishedDelegate)
{
if (finishedDelegate == null)
{
finishedDelegate = timeSpan => Debug.Print("Elapsed time: {0}", timeSpan);
}
_finishedDelegate = finishedDelegate;
_stopwatch = Stopwatch.StartNew();
}
public static Timer Start(Action<TimeSpan> finishedDelegate = null)
{
return new Timer(finishedDelegate);
}
public void Dispose()
{
_stopwatch.Stop();
_finishedDelegate.Invoke(_stopwatch.Elapsed);
}
}
您可以在Start方法中提供一个委托来控制结果应该发生什么。默认情况下,它将时间输出到调试控制台。我编写了这段代码来进行一些简单的测量:
public class Timer : IDisposable
{
private readonly Stopwatch _stopwatch;
private readonly Action<TimeSpan> _finishedDelegate;
private Timer(Action<TimeSpan> finishedDelegate)
{
if (finishedDelegate == null)
{
finishedDelegate = timeSpan => Debug.Print("Elapsed time: {0}", timeSpan);
}
_finishedDelegate = finishedDelegate;
_stopwatch = Stopwatch.StartNew();
}
public static Timer Start(Action<TimeSpan> finishedDelegate = null)
{
return new Timer(finishedDelegate);
}
public void Dispose()
{
_stopwatch.Stop();
_finishedDelegate.Invoke(_stopwatch.Elapsed);
}
}
您可以在Start方法中提供一个委托来控制结果应该发生什么。默认情况下,它会将时间输出到调试控制台。请澄清您的问题。是否需要计算每个方法的运行时间?方法从另一个调用是有意的还是你的计算方法?Andy,我需要计算每个方法的运行时间。我不知道会调用什么巫婆方法。它可以是5种方法,也可以是不同项目中的20种方法。请澄清您的问题。是否需要计算每个方法的运行时间?方法从另一个调用是有意的还是你的计算方法?Andy,我需要计算每个方法的运行时间。我不知道会调用什么巫婆方法。它可以是5种方法,也可以是不同项目中的20种方法。我必须是线程安全的。我必须是线程安全的。只是出于好奇,使用PostSharp解决方案不会为MethodOne返回~1000ms吗?因为它只记录方法完成的时间,即Method2和Method3之后的时间。您是对的,但这会鼓励编写相互依赖性较小的代码。方法一、方法二和方法三可能无法相互调用,而另一个方法将包含调用这些方法的流程。它将更加模块化,每种方法都可以独立测试。它认为解决方案将是一个APM工具,可能是AppDynamics。只是出于好奇,使用PostSharp解决方案不会为MethodOne返回~1000ms吗?因为它只记录方法compl时的时间
etes,这是在Method2和Method3之后。你是对的,但这鼓励编写相互依赖性较小的代码。方法一、方法二和方法三可能无法相互调用,而另一个方法将包含调用这些方法的流程。它将更加模块化,每种方法都可以独立测试。它认为解决方案将是APM工具,可能是AppDynamics。