最近我在查看一些生产环境的登录代码时发现了这个...
HttpContext.Current.Trace.Write(query + ": " + username + ", " + password));
...where查询是一个短的SQL查询,用于获取匹配的用户。这会有任何性能影响吗?我认为它非常小。
此外,使用HTTP上下文的这种精确跟踪的目的是什么?这些数据被追踪到哪里?提前感谢!
最近我在查看一些生产环境的登录代码时发现了这个...
HttpContext.Current.Trace.Write(query + ": " + username + ", " + password));
...where查询是一个短的SQL查询,用于获取匹配的用户。这会有任何性能影响吗?我认为它非常小。
此外,使用HTTP上下文的这种精确跟踪的目的是什么?这些数据被追踪到哪里?提前感谢!
如果在构建过程中定义了TRACE条件编译常量,它将产生性能影响。但做任何事情都会有某种影响 :)
至于这是否对应用程序产生重大影响,这是非常不可能的,因为Trace旨在运行,并在许多生产应用程序中运行。只有滥用该功能才会导致明显的性能差异。
但像往常一样,不要相信我,而要相信分析器。
我目前没有足够的声望点数来进行评论,但我想快速声明一下对Jonathan答案的看法。我看到的数字似乎表明,仅在少量字符串连接时使用stringbuilder是没有意义的。创建stringbuilder对象的开销超过了连接速度的好处。
这段代码中最大的性能损失不在跟踪上,而是在使用 + 运算符进行字符串连接时。这会执行一些低效的内存操作,甚至比 IO 操作更耗费性能。我建议使用 string.Concat 或 StringBuilder 类(或者 string.Format)来代替。
我猜Trace Source在将消息转发给侦听器之前会查看其开关的TraceLevel。因此,如果我们将开关的默认TraceLevel值保持为“Error”,那么跟踪开销将大大减少,因为只有“Error”跟踪信息会发送到侦听器。
只是猜测...我还没有测量任何东西。如果我这样做了,我会更新的。
2017年更新:似乎已经过时,但在asp.net应用程序中以一种相当方便的方式跟踪/记录信息到浏览器/可远程访问的.aspx页面。
https://msdn.microsoft.com/en-IN/library/z48bew18(v=vs.71).aspx
如果跟踪信息写入文本文件,我认为它比写入控制台要花费更多的时间。