gpt4 book ai didi

c# - 你会如何重构这段臭代码? (记录、复制和粘贴,.Net 3.5)

转载 作者:可可西里 更新时间:2023-11-01 08:31:34 24 4
gpt4 key购买 nike

我有这样的代码:

Logger logger = new Logger();
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
logger.LogInformation("Calling SomeObject.SomeMethod at " + DateTime.Now.ToString());
stopWatch.Start();
// This is the method I'm interested in.
SomeResponse response = someObject.SomeMethod(someParam);
stopWatch.Stop();
logger.LogInformation("SomeObject.SomeMethod returned at " + DateTime.Now.ToString());
logger.LogInformation("SomeObject.SomeMethod took " + stopWatch.ElapsedMilliseconds + " milliseconds.");

我需要围绕更多的对象和它们的方法包装相似的代码来做一些性能分析。我不允许使用第 3 方插件或软件等。

我真的不想围绕所有这些方法编写相同的代码调用所有这些日志记录代码。您将如何重构它以消除我的一些编码工作?

如果我不是很清楚,请在评论中提问,我会尽力澄清。

感谢您的帮助!

最佳答案

您可以重构代码以接受方法指针实例(又名 System.Action )。

public void CallWithLogTiming (Action theAction)
{
Logger logger = new Logger();
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
logger.LogInformation("Calling SomeObject.SomeMethod at " + DateTime.Now.ToString());
stopWatch.Start();

// This is the method I'm interested in.
theAction();

stopWatch.Stop();
logger.LogInformation("SomeObject.SomeMethod returned at " + DateTime.Now.ToString());
logger.LogInformation("SomeObject.SomeMethod took " + stopWatch.ElapsedMilliseconds + " milliseconds.");
}

然后你可以通过创建一个lambda表达式来调用它。由于 myResponse 是一个捕获的变量,它会在该 Action 运行时被填充,并且 myResponse 稍后将可在此范围内使用。

SomeResponse myResponse = null;
CallWithLogTiming( () => myResponse = someObject.SomeMethod(someParam) );

关于c# - 你会如何重构这段臭代码? (记录、复制和粘贴,.Net 3.5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/840689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com