LINQ能不能用系列(二)LINQ to SQL 效率比对

前言

很多人听说过LINQ TO SQL与ADO.NET传统方式用于不同的环境,LINQ TO SQL与ADO.NET传统方式也没有可比性,就像公交车与私家车一样,虽然是车但用途完全不同,但很少有人去探究,究竟为什么他们不同,他们不同的原因是什么,这我觉得是一个好的程序和一个普通程序最主要的区别之一。下面一起来看LINQ TO SQL效率到底如果吧。

内容

测试环境:net framework 4.0 + Sql Server 2008

测试用途:100w条数据 like 查询,原因添加、修改、删除消耗资源与时间相对较少,不易测试,查询里面最消耗时间的无非就是 like 与 in查询,我们就采用like 相对比较耗时与耗时间的典型来测。

测试数据:100w条测试数据(其中有一条数据有别于其他数据,在数据的最中央)

测试数据图:

 

测试脚本:

View Code
create database TestDB
go
use TestDB
go
create table gameinfo
(
gid int identity not null primary key,
gamename varchar(250) not null,
createtime datetime default getdate(),
content text,
gametype int
)
go
declare @count int
set @count =0
while @count<1000000
begin
insert into gameinfo(gamename,content,gametype) 
values('游戏战警X' ,'这游戏聊咋哩,点击链接查看游戏战警。',1);
set @count=@count+1;
end
go
update gameinfo set gamename='我是第一无二的Dota游戏' where gid=500000  --like查询用
select COUNT(1) as 信息总数 from gameinfo

测试项目图:

核心代码:

GameInfoBLL.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace LINQProject
{
/// <summary>
/// 游戏信息业务处理类(LINQ TO SQL 效率测试用)
/// 王磊(Stone)
/// 2012.05.18
/// </summary>
public class GameInfoBLL
{
#region 根据游戏名称模糊查询
/// <summary>
/// 根据游戏名称模糊查询
/// </summary>
/// <param name="name">游戏名称呢个</param>
/// <returns>List<GameInfoModel></returns>
public static List<GameInfoModel> GetGameInfoByGname(string name)
{
List<GameInfoModel> list = new List<GameInfoModel>(1000000);
string sql = "select * from gameinfo where gamename like @gamename";
SqlDataReader dr = null;
try
{
using (dr = DBHelper.GetSqlDataReaderBySql(sql, new SqlParameter[]{
new SqlParameter("@gamename","%"+name+"%") }))
{
GameInfoModel game = new GameInfoModel();
while (dr.Read())
{
game.gid = (int)dr["gid"];
game.gamename = (string)dr["gamename"];
game.createtime = (DateTime)dr["createtime"];
game.content = (string)dr["content"];
game.gametype = (int)dr["gametype"];
list.Add(game);
}
}
}
catch (Exception ex)
{
if (null != dr && !dr.IsClosed)
{
dr.Close();
}
throw ex;
}
return list;
}
#endregion
}
}

DBHelper.cs

View Code
    #region 查询信息返回SqlDataReader
/// <summary>
/// 查询信息返回SqlDataReader
/// </summary>
/// <param name="sql">查询sql</param>
/// <param name="par">SqlParameter 可选参数数组</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader GetSqlDataReaderBySql(string sql, params SqlParameter[] par)
{
using (Conn)
{
SqlCommand cmd = new SqlCommand(sql, Conn);
if (null != par)
cmd.Parameters.AddRange(par);
try
{
cmd.Connection.Open();
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
cmd.Connection.Close();
throw ex;
}
finally
{
cmd.Parameters.Clear();
}
}
}
#endregion

测试类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace LINQProject
{
class Program
{
static void Main(string[] args)
{
for (int i = 1; i < 10; i++)
{
Test(i);
}
Console.Read();
}
/// <summary>
/// 效率方法测试
/// </summary>
private static void Test(int testNumber)
{
Stopwatch linqWatch = new Stopwatch();
linqWatch.Start();
// LINQ 查询
DataClasses1DataContext db = new DataClasses1DataContext();
var glist = from g in db.gameinfo
where g.gamename.Contains("Dota")
select g;
// foreach 遍历
foreach (var item in glist)
{
Console.Write("LINQ:" + item.gamename + " ");
}
linqWatch.Stop();
Stopwatch adoWatch = new Stopwatch();
adoWatch.Start();
// ADO.NET 查询
List<GameInfoModel> list = GameInfoBLL.GetGameInfoByGname("Dota");
// foreach 遍历
foreach (GameInfoModel item in list)
{
Console.WriteLine("ADO.NET:" + item.gamename);
}
adoWatch.Stop();
Console.WriteLine("================================结果" + testNumber + "=========================================");
Console.WriteLine(String.Format("LINQ 用时:{0} \r\nADO.NET 用时:{1}",
linqWatch.ElapsedMilliseconds, adoWatch.ElapsedMilliseconds));
}
}
}

测试项目下载:点击

结果

如图:

LINQ TO SQL第一次的时候比较消耗资源,原因LINQ第一次初始化比较耗时,之后LINQ查询与ADO.NET几乎一样,在100w条数据下随然数据大同小异,但已经足够说明问题,LINQ TO SQL 还是可以用的,起码中小型项目可以放心使用。

大家如有好的建议或者意见欢迎拍板。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

libgdx游戏引擎开发笔记(十三)SuperJumper游戏例子的讲解(篇七)----各个物体的创建及其碰撞检测...

接着上一篇&#xff0c;我们完成后续的扫尾工作&#xff1a;游戏中个物体创建及其碰撞检测,分数保存&#xff0c;音效处理。1.World类&#xff1a;&#xff08;加入所有物体&#xff0c;及其碰撞检测&#xff0c;代码里有详细注解&#xff09;package com.zhf.mylibgdx; import…

oracle交流 提问,Oracle相关提问的智慧技巧

《很久以前的一篇对初学Oracle建议的文章》曾提到了提问的智慧&#xff0c;这个问题确实很值得说&#xff0c;我在学生时期&#xff0c;尤其是在本硕阶段中&#xff0c;作为非科班出身&#xff0c;要接触很多新的计算机技术&#xff0c;日常做的最多的&#xff0c;可能就是问问…

yolov5的flask部署python调用

yolov5 github&#xff1a;https://github.com/ultralytics/yolov5 跟踪&#xff1a;https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch TensorRT&#xff1a;https://github.com/TrojanXu/yolov5-tensorrt NCNN&#xff1a;https://github.com/WZTENG/YOLOv5_NCNN …

Sql Server内置函数实现MD5加密

实例 MD5加密“123456”&#xff1a; HashBytes(MD5,123456) 结果&#xff1a;0xE10ADC3949BA59ABBE56E057F20F883E &#xff08;提示&#xff1a;看完最后&#xff0c;结果要进行转换。&#xff09; 函数 函数描述返回值 HashBytes HashBytes (加密方式, 待加密的值)加密方…

(转)关于X64位系统IIS7下支持32位asp.net程序

最近在windows2008 x64位系统下的IIS7下部署asp.net程序。 vs2005或vs2008默认的情况下是Any cpu 的也就是支持x86和x64两种系统的。可我的程序在引用了一个三方dll组件时引起了这样的错误&#xff1a; 错误“/test”应用程序中的服务器错误。 -------------------------------…

Ubuntu16.04 Caffe 编译安装步骤记录

历时一周终于在 ubuntu16.04 系统成功安装 caffe 并编译&#xff0c;网上有很多教程&#xff0c;但是某些步骤并没有讲解详尽&#xff0c;导致配置过程总是出现各种各样匪夷所思的问题&#xff0c;尤其对于新手而言更是欲哭无泪&#xff0c;在我饱受折磨后决定把安装步骤记录下…

oracle11g arm,想知道ARM11架构?这篇介绍告诉你

实际上&#xff0c;处理器采用的架构才是影响处理器性能的关键因素。手机中采用的ARM架构&#xff0c;从最早的ARM9到下一代的Cortex-A15&#xff0c;已经经历了多次的更新换代&#xff0c;每一次的升级都带来了性能的大幅提升&#xff0c;那么它们各自的性能到底怎么样呢?今天…

C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)

前言 C# 用IP地址&#xff08;123.125.114.144&#xff09;查询位置&#xff08;北京市百度公司&#xff09;的东西&#xff0c;非常好用也非常方便&#xff0c;可手动升级刷新IP库&#xff0c;一次编码永久收益&#xff0c;可支持winform、asp.net等程序。 本文使用的IP库为…

WCF简单教程(8) 安全 - Windows认证

第八篇&#xff1a;WCF安全WCF提供了非常丰富的加密机制与审核机制&#xff0c;以保证对外提供的服务安全可靠。本文是简单教程&#xff0c;所以只挑其中的一小部分来聊聊。先来看看最简单的Windows认证。所谓Windows认证&#xff0c;是指客户端访问时&#xff0c;要提供服务端…

常用Sql整理笔记

一、多行结果转换为一行&#xff0c;用逗号隔开。 mssql代码如下&#xff1a; 点击打开 -- 多行select tid from typeinfo where pid4-- 一行select STUFF((Select ,Convert(varchar(50),tid) FROM typeinfo where pid4 FOR XML PATH()),1,1,) as tid sqlite代码如下&#xff…

Ubuntu16.04 Caffe2 编译安装步骤记录

我的本机环境如下&#xff0c;任何的环境上的不一致可能会带来一些安装上的问题&#xff0c;所以这个教程只是一个简单的参考。 环境 操作系统: Ubuntu 16.04GPU型号: Tesla M40 24GBPython: 2.7 路径 /usr/bin/python即全局的python解释器 caffe2必备依赖的安装 sudo apt-g…

oracle中视图窗粉色的,Oracle 11g日常操作与维护手册

# /oracle/crs/bin/srvctl config nodeapps -a -n linux1RAC安装完以后&#xff0c;可以修改两个节点的VIP。前提是修改后的VIP必须没有被其他系统使用掉。正确的修改方法如下&#xff1a;步骤1&#xff1a;使用srvctl修改VIP进入/crs/bin目录下执行如下命令&#xff1a;# ./sr…

Go语言Web框架gwk介绍 (一)

今天看到Golang排名到前30名了&#xff0c;看来关注的人越来越多了&#xff0c;接下来几天详细介绍Golang一个web开发框架GWK。 现在博客园支持markdown格式发布文章么&#xff1f;后台的编辑器不太好用嘛。 GWK 简介 gwk(GO Web Server Kit)是GO语言的Web Server开发框架&…

3D手势姿态跟踪算法:手机端实时检测,多个手势同时捕捉

就在不久前&#xff0c;Google 人工智能实验室宣布&#xff0c;他们在「实时手部跟踪」方面取得了新的进展&#xff0c;并将这项新技术运用在了 MediaPipe 中&#xff0c;这也是 AI 计算机视觉任务的一大突破。这一技术不光可以在手机上实现实时捕捉性能&#xff0c;甚至可以同…

Windows服务的快速搭建与调试(C#图解)

目录 一、什么是Windows 服务&#xff1f; 二、创建Windows 服务与安装/卸载批处理。 三、调试Windows 服务。 正文 一、什么是Windows 服务&#xff1f; 答&#xff1a;Microsoft Windows 服务&#xff08;即&#xff0c;以前的 NT 服务&#xff09;使您能够创建在它们自…

使用 JMeter 进行API接口压力测试

使用 JMeter 进行API接口压力测试 一.前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试&#xff0c;他可以帮助我们发现系统中的瓶颈问题&#xff0c;减少发布到生产环境后出问题的几率&#xff1b;预估系统的承载能力&#xff0c;使我们能根据其做出一些应对措施…

ser,ver

friend_conservation_bgfriend_conversation_bg.png, [self.bgButtonsetBackgroundImage:[[UIImageimageNamed:"conversation_bg.png"] stretchableImageWithLeftCapWidth:10topCapHeight:30] forState:UIControlStateNormal]; xy方向 找 两根线 来 拉伸&#xff0c;…

linux 删除node进程,关于node.js:杀死Linux中的节点进程

尝试使用节点server.js运行节点服务器时&#xff0c;我收到侦听EADDRINUSE ::: 4002的错误。 我通过以下命令在端口4002上监听进程&#xff1a;sudo lsof -i&#xff1a;4002。 之后&#xff0c;我尝试使用kill -9终止进程。 问题是当我在终止进程后再次运行sudo lsof -i&#…

MS SQL查询库、表、列数据结构信息汇总

前言 一般情况我们下&#xff0c;我们是知道数据库的表、列信息的&#xff08;因为数据库是我们手动设计&#xff09;&#xff0c;但特殊情况下&#xff0c;如果你只能拿到数据库连接信息&#xff0c;也就是知道的一个数据库名的情况下&#xff0c;你要怎么得到它下面的所有表…

linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存

1. 在linux下&#xff0c;查看一个运行中的程序&#xff0c; 占用了多少内存&#xff0c; 通常的命令有php(1). ps aux&#xff1a;html其中 VSZ(或VSS)列 表示&#xff0c;程序占用了多少虚拟内存。linuxRSS列 表示&#xff0c; 程序占用了多少物理内存。ios虚拟内存能够不用…