Coohx 2017-04-20
有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件。3.2版本我们在框架底层新增了记录框架运行的所有SQl过程保存到用户指定的地方以便分析查看,只需要在配置文件把配置项”LogSQL”设置为True即可。框架会自动记录各常用数据库如:Oracle、SqlServer、MySQL等的操作情况。
一、Web记录Sql执行情况
1、在我们的Web项目中要记录SQL可以在Web的配置文件中设置LogSql配置项为True,默认为False,配置文件的位置MVC项目是在RDIFramework.MvcApp项目根目录下的XmlConfig文件夹下的system.config文件,WebForm项目是在RDIFramework.WebApp项目根目录下的Web.Config文件,设置配置项如下图所示:
只要设置LogSQL为True,框架就会自动记录所有Sql执行过程并保存到指定目录,一般默认在Web项目根目录的Log文件夹下,如下图:
2、查看记录的Sql。
打开一个文件,查年记录的Sql情况,如下:
二、WinForm记录Sql执行情况
WinForm项目记录Sql与Web类似,一样的要修改Config.xml中的记录Sql的配置项,如下图所示。
通过上面的配置后,一样的我们打开框架做一些操作后查看记录的Sql情况,如下图:
三、公共方法调用
如果我们需要单独记录sql的执行情况,可以调用框架提供的公共接口,如下图所示:
下面把写日志的三个公共接口分享,需要的可以参考哟。
#region public virtual void WriteLog(string commandText, string fileName = null) 写入sql查询句日志 /// <summary> /// 写入sql查询句日志 /// </summary> /// <param name="commandText"></param> public virtual void WriteLog(string commandText) { string fileName = DateTime.Now.ToString(SystemInfo.DateFormat) + " _ " + this.FileName; WriteLog(commandText, fileName); } /// <summary> /// 写入sql查询句日志 /// </summary> /// <param name="commandText">异常</param> /// <param name="fileName">文件名</param> public virtual void WriteLog(string commandText, string fileName = null) { if (string.IsNullOrEmpty(fileName)) { fileName = DateTime.Now.ToString(SystemInfo.DateFormat) + " _ " + this.FileName; } string returnValue = string.Empty; // 系统里应该可以配置是否记录异常现象 if (!SystemInfo.LogSQL) { return; } // 将异常信息写入本地文件中 string logDirectory = SystemInfo.StartupPath + @"\\Log\\Query"; if (!System.IO.Directory.Exists(logDirectory)) { System.IO.Directory.CreateDirectory(logDirectory); } string writerFileName = logDirectory + "\\" + fileName; if (!File.Exists(writerFileName)) { FileStream FileStream = new FileStream(writerFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); FileStream.Close(); } StreamWriter streamWriter = new StreamWriter(writerFileName, true, Encoding.Default); streamWriter.WriteLine(DateTime.Now.ToString(SystemInfo.DateTimeFormat) + " " + commandText); streamWriter.Close(); } public virtual void WriteLog(string commandText, IDbDataParameter[] dbParameters = null, string fileName = null) { // 系统里应该可以配置是否记录异常现象 if (!SystemInfo.LogSQL) { return; } if (string.IsNullOrEmpty(fileName)) { fileName = DateTime.Now.ToString(SystemInfo.DateFormat) + " _ " + FileName; } string message = string.Empty; message = DateTime.Now.ToString(SystemInfo.DateTimeFormat) + System.Environment.NewLine + "commandText内容" + System.Environment.NewLine + commandText; if (dbParameters != null) { StringBuilder sb = new StringBuilder(); foreach (var parameter in dbParameters) { sb.AppendLine(parameter.ParameterName + "=" + parameter.Value); } message += System.Environment.NewLine + "dbParameters内容" + System.Environment.NewLine + sb.ToString(); } string logDirectory = SystemInfo.StartupPath + @"\Log\Query"; if (!System.IO.Directory.Exists(logDirectory)) { System.IO.Directory.CreateDirectory(logDirectory); } string writerFileName = logDirectory + "\\" + fileName; if (!File.Exists(writerFileName)) { FileStream FileStream = new FileStream(writerFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); FileStream.Close(); } StreamWriter streamWriter = new StreamWriter(writerFileName, true, Encoding.Default); streamWriter.WriteLine(DateTime.Now.ToString(SystemInfo.DateTimeFormat) + " " + message); streamWriter.Close(); } #endregion
输入发占用快捷键。撤掉输入法的快捷键。还有系统自带快捷键也要取消。在tools工具包中找到deepin-terminal中运行启动脚本。因为途中为去下在github源码。这里下载慢的可以直接先下载下来
不管是 Android 代码还是数据结构的设计,都涉及到算法的问题,其中时间复杂度是一个Core,这篇文章我们就一起聊聊时间复杂度的原理!要想编写出能高效运行的程序,我们就需要考虑到 “算法的效率”。