在C#和ASP.NET中跟踪对性能有什么影响?

f5emj3cl  于 2023-02-01  发布在  .NET
关注(0)|答案(7)|浏览(155)

我在最近看的一些产品登录代码中发现了这个...

HttpContext.Current.Trace.Write(query + ": " + username + ", " + password));

...其中query是一个简短的SQL查询,用来抓取匹配的用户。这会对性能有什么影响吗?我认为影响很小。
另外,使用HTTP上下文进行这种类型的跟踪的目的是什么?这些数据被跟踪到哪里?提前感谢!

xghobddn

xghobddn1#

是的,只要在构建期间定义了TRACE条件编译常量,就会对性能产生影响。执行任何操作都会产生某种类型的影响:)
至于这是否会对应用程序产生重大影响,这是非常不可能的,因为Trace是为运行而设计的,并且在许多生产应用程序中运行。只有滥用该功能才会导致明显的性能差异。
但一如既往别相信我相信侧写师。

carvr3hs

carvr3hs2#

我还没有评论的声誉点,但我想对乔纳森的答案做一个简短的声明。我看到的数字似乎表明,使用stringbuilder进行少数字符串连接是没有意义的。创建stringbuilder对象的开销超过了连接速度的好处。

s71maibg

s71maibg3#

跟踪消息可以发送到许多不同的位置。您可以为控制台、VisualStudio调试窗口、文件、数据库表或事件日志添加(或移除)TraceListener。您甚至可以生成自己的TraceListener。
此外,还可以将跟踪配置为在针对发布进行编译时不执行任何操作。
因此,使用Trace对性能的影响可能会有很大的不同,从实际上为零到完全让应用陷入停滞,这取决于各种活动侦听器的性能。向文件、数据库或控制台写入数据要花费大量的工作,相对于那些I/O绑定的活动,Trace不会增加太多的开销。
撇开性能影响不谈,我对跟踪密码值的想法感到绝对恐惧。这是绝对不能做的事情。

a9wyjsp7

a9wyjsp74#

这段代码中最大的性能损失不是在跟踪中,而是在通过使用+操作符进行的字符串连接中。这会执行一些效率低下的内存操作,在性能方面可以击败IO操作。我会将其更改为使用类似于string.concat或StringBuilder类(或string.format)的内容。

w3nuxt5m

w3nuxt5m5#

跟踪会给请求增加额外的开销,因此不应为已部署的应用程序启用跟踪。但是,可以保留Trace.Write()语句,因为在未启用跟踪时会忽略这些语句。
http://msdn.microsoft.com/en-us/library/ms972204.aspx

k4ymrczo

k4ymrczo6#

而且,如果trace正在写入文本文件,其开销将高于写入控制台IMHO

0qx6xfy6

0qx6xfy67#

我猜跟踪源在将消息转发给监听器之前会查看其开关的TraceLevel。因此,如果我们将开关的默认TraceLevel值保持为“Error”,那么跟踪开销将大大减少,因为只有“Error”跟踪将被发送给监听器。
只是一个猜测...我还没有测量任何东西。将更新,如果我这样做。

2017年更新:似乎是一种过时但相当方便的方法,可以在www.example.com应用程序中跟踪/记录信息到浏览器/可远程访问的.aspx页面asp.net。

https://msdn.microsoft.com/en-IN/library/z48bew18(v=vs.71).aspx

相关问题