如何在ASP.NET中了解LINQ语句性能

[ 2903 查看 / 0 回复 ]

如果是在桌面程序中,只需要
  1. _context.Log = Console.Out;
  2. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
复制代码
即可在控制台输出SQL语句。可是在ASP.NET中又该怎么办呢?©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
这时我想起了StringWriter。用它就可以代替Console.Out帮我们接收输出的日志,保存在一个StringBuilder里。©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
于是构造一个辅助类:
  1. using System;
  2. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  3. using System.Collections.Generic;
  4. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  5. using System.Linq;
  6. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  7. using System.Web;
  8. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  9. using System.IO;
  10. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  11. using System.Text;
  12. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  13. namespace Clowwindy.Models{
  14. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  15. public static class LogHelper{
  16. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  17. public static StringBuilder Log = new StringBuilder();
  18. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  19. public static TextWriter In = new StringWriter(Log);
  20. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  21. public static string GetAllLog(){In.Flush();
  22. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  23. return Log.ToString();
  24. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  25. }
  26. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  27. public static void Clean(){
  28. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  29. Log = new StringBuilder();In = new StringWriter(Log);
  30. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  31. }
  32. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  33. }
  34. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  35. }
  36. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
复制代码
再添加一个页面log.aspx,用来显示日志:
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Log.aspx.cs" Inherits="Clowwindy.Log" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"><title>SQL Log</title></head><body><form id="form1" runat="server"><asp:Button ID="btn_Clean" runat="server" Text="清空" /><div><asp:Literal ID="Literal1" runat="server"></asp:Literal></div></form></body></html>
  2. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
复制代码
  1. using System;
  2. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  3. using System.Collections.Generic;
  4. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  5. using System.Linq;
  6. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  7. using System.Web;
  8. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  9. using System.Web.UI;
  10. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  11. using System.Web.UI.WebControls;
  12. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  13. using Clowwindy.Models;
  14. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  15. namespace Clowwindy{
  16. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  17. public partial class Log : System.Web.UI.Page{
  18. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  19. protected void Page_Load(object sender, EventArgs e){
  20. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  21. if (Request.UserHostAddress != "127.0.0.1"){
  22. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  23. Response.End();return;
  24. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  25. }
  26. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  27. Literal1.Text = LogHelper.GetAllLog().Replace("\n","\n");
  28. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  29. }
  30. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
  31. protected void btn_Clean_Click(object sender, EventArgs e){LogHelper.Clean();Literal1.Text = null;}}}
  32. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
复制代码
最后在所有new DataContext的地方加上
  1. public Repository(){_context = new TDataContext();_context.Log = LogHelper.In;}
  2. ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb) ©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
复制代码
打开log.aspx,即可看到之前执行的SQL语句。©Å_ùªí(þeâwww.nfhot.comh$Œ»*ˆb)
学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?
知之为知之,不知为不知,是知也。
TOP