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

开发 后端
作者最近在使用Linq To SQL的时候,为了了解不同Linq语句对性能造成的不同影响,需要获得Linq To SQL生成的SQL语句。为了实现这一功能,作者创建了一些小工具,供大家使用。

如果是在桌面程序中,只需要

_context.Log = Console.Out;

即可在控制台输出SQL语句。可是在ASP.NET中又该怎么办呢?

这时我想起了StringWriter。用它就可以代替Console.Out帮我们接收输出的日志,保存在一个StringBuilder里。

于是构造一个辅助类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Text;

namespace Clowwindy.Models
{
    public static class LogHelper
    {
        public static StringBuilder Log = new StringBuilder();
        public static TextWriter In = new StringWriter(Log);
        public static string GetAllLog()
        {
            In.Flush();
            return Log.ToString();
        }
        public static void Clean()
        {
            Log = new StringBuilder();
            In = new StringWriter(Log);
        }
    }
}

  再添加一个页面log.aspx,用来显示日志:

<%@ 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="清空" 
        onclick="btn_Clean_Click"/>
    <div>
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Clowwindy.Models;

namespace Clowwindy
{
    public partial class Log : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.UserHostAddress != "127.0.0.1")
            {
                Response.End();
                return;
            }
            Literal1.Text = LogHelper.GetAllLog().Replace("\n","\n<br/>");
        }

        protected void btn_Clean_Click(object sender, EventArgs e)
        {
            LogHelper.Clean();
            Literal1.Text = null;
        }
    }
}

 ***在所有new DataContext的地方加上_context.Log = LogHelper.In:

        public Repository()
        {
            _context = new TDataContext();
            _context.Log = LogHelper.In;
        }

打开log.aspx,即可看到之前执行的SQL语句。

【编辑推荐】

  1. LINQ横向对比foreach方法
  2. 手把手教你用好LINQ to SQL
  3. 使用LINQ和ADO.NET创建Silverlight程序
责任编辑:彭凡 来源: cnblogs
相关推荐

2009-09-10 14:02:08

LINQ ASP.NE

2011-10-14 10:37:54

ASP.NET

2009-07-24 10:52:42

ASP.NET ISA

2009-07-22 16:11:43

ASP.NET AJA

2009-07-20 15:30:11

ASP.NET应用

2009-08-05 11:00:46

获得RowIndexASP.NET

2009-08-05 15:29:33

ASP.NET For

2009-07-28 17:49:30

ASP.NET定期回收

2009-07-28 16:03:23

ASP.NET状态服务

2009-07-23 15:44:39

ASP.NET MVC

2009-07-20 17:12:17

ASP.NET访问数据

2009-07-22 13:24:24

ASP.NET MVC

2009-08-10 10:19:47

ASP.NET组件设计

2009-07-23 15:24:37

ASP.NET Ima

2009-07-21 14:16:02

ASP.NET管道优化

2011-08-23 10:58:59

2009-07-27 16:19:59

ASP.NET报表控件

2021-03-17 09:45:31

LazyCacheWindows

2021-11-01 14:52:38

ElasticSear索引SQL

2021-02-02 16:19:08

Serilog日志框架
点赞
收藏

51CTO技术栈公众号