ASP.NET MVC5+EF6+EasyUI 后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试...

本文通过在SQL2008R2中插入100万条数据,测试了Entity Framework(EF)的性能表现,并对比了使用存储过程与EF生成的LINQ成果在Easyui下的分页显示效率。实验结果显示,对于百万级别的数据查询,EF的表现令人满意,且在适当的数据量增加下,查询分页时间可控。

系列目录

我想测试EF在一百万条数据下的显示时间!这分数据应该有很多同学想要,看看EF的性能!

服务器

现在来向SQL2008R2插入1000000条数据吧

declare @i int;
set @i=0;
while @i<1000000
begin
INSERT INTO [AppDB].[dbo].[MIS_Article]
           ([Id]
           ,[ChannelId]
           ,[CategoryId]
           ,[Title]
           ,[ImgUrl]
           ,[BodyContent]
           ,[Sort]
           ,[Click]
           ,[CheckFlag]
           ,[Checker]
           ,[CheckDateTime]
           ,[Creater]
           ,[CreateTime])
     VALUES
           (CONVERT(varchar,@i)
           ,0
           ,'001001'
           ,'这是第'+ CONVERT(varchar,@i)
           ,''
           ,'这是第'+ CONVERT(varchar,@i)+'条测试记录'
           ,0
           ,122
           ,1
           ,'admin'
           ,'2014-5-1'
           ,'admin'
           ,'2014-5-1')
   set @i = @i+1;
end

select COUNT(*) from dbo.MIS_Article

我发现我之前的理解是错的。不用存储过程,跟踪EF生成的LINQ成果是理想了,在Easyui下的分页显示也是2秒左右,如图的分页

在这里我只能把数据量加大到一千万,在EF中,我们可能无必要用存储过程来做列表的显示,因为生成的查询语句是非常理想的。

现在数据已经到达300W+了,查询分页的时间小于4秒

当数据达到六百万条记录的时候事件已经在6秒左右了,可能我的服务器处理能力有限。配置有点差

所以当你的数据到达一千万的时候,你需要更换更好的服务器,不能再纠结于存储过程,和程序的性能了,因为程序就TM的这样写了,还能怎么样!

大家可以转到http://www.woaitun.com/测试 帐号密码admin admin123,信息频道管理-------信息中心--------管理中心

但这里还是放出存储过程!效果却是一样的,有兴趣的可以了解一下这个分页存储过程

USE [AppDB]
GO
/****** Object:  StoredProcedure [dbo].[P_MIS_Info_GetICanManage]    Script Date: 06/16/2014 09:58:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[P_MIS_Info_GetICanManage]
@WhereSQL varchar(1024),
@Rows int=15, --每页有几条
@PageNo int=1,--页码
@RowsCount int out
as
begin

CREATE TABLE #Art(
        [Id] [varchar](50) NOT NULL,
    [ChannelId] [int] NOT NULL,
    [CategoryId] [varchar](50) NOT NULL,
    [Title] [varchar](100) NOT NULL,
    [ImgUrl] [varchar](255) NULL,
    [BodyContent] [varchar](8000) NULL,
    [Sort] [int] NULL,
    [Click] [int] NULL,
    [CheckFlag] [int] NOT NULL,
    [Checker] [varchar](50) NULL,
    [CheckDateTime] [datetime] NULL,
    [Creater] [varchar](50) NULL,
    [CreateTime] [datetime] NULL,
)


--获取总记录数
Create table #CountTable
(
    Id varchar(50)
)
exec('insert into #CountTable select distinct b.Id from  MIS_Article as b where 1=1 '+@WhereSQL+' ')
select @RowsCount=COUNT(*) from #CountTable


--获取管理的帖子
declare @sql varchar(1024)
set @sql ='insert into #Art select top ('+CONVERT(varchar,@Rows)+') [Id]
           ,[ChannelId]
           ,[CategoryId]
           ,[Title]
           ,[ImgUrl]
           ,[BodyContent]
           ,[Sort]
           ,[Click]
           ,[CheckFlag]
           ,[Checker]
           ,[CheckDateTime]
           ,[Creater]
           ,[CreateTime] from MIS_Article where Id in( '
+' select b.Id from( select distinct b.Id,row_number() over (order by b.CreateTime desc) as [row_number] from '
+' MIS_Article as b where 1=1 '+@WhereSQL+') as b where '
+' b.[row_number] >'+CONVERT(varchar,(@Rows*(@PageNo-1)))+' )'


end
print @sql
exec (@sql)

SELECT [Id]
           ,[ChannelId]
           ,[CategoryId]
           ,[Title]
           ,[ImgUrl]
           ,[BodyContent]
           ,[Sort]
           ,[Click]
           ,[CheckFlag]
           ,[Checker]
           ,[CheckDateTime]
           ,[Creater]
           ,[CreateTime] from #Art
    
    

数据查询数据:也许受到字段列个数,字段类型,服务器处理能力,在线人数等影响,但这里的数据足以说明查询百万级的数据已经问题不大。

在此说明一个问题,MVC+EF可以在很多中大型的系统中运用,而且变得越来越简单,让人能把关注点多放在业务方面!

 

 

 

 

在网上找了一个 Asp数据操作组件(百万级分页) ,实用环境:Asp+DLL+MsSQL(这个网上很多地方都可以下载),并且其中结合SQL存储过程,说实话以前SQL存储过程接触的比较少,所以在调试该组件的时候遇到了一些问题,并试着改了一下(作者别生气(^..^)),高手们别笑话我。 原代码如下: 有分页列表数据: cls.tblName="Tablename" '表名 cls.fldName="Id" '排序关键字段 cls.PageIndex=Request("P")*1 '当前页码 cls.PageSize=20 '每页列数 cls.OrderType=1 '排序方式,0 、1 cls.strWhere=StrW '查询条件,不带Where cls.ListUrl="?Y="&Y&"&M="&M&"&D="&D&"&Sn="&Sn&"&P=" 分页URL Set Rs=cls.Result do while not rs.eof rs.movenext loop 分页数据 cls.page 在原文的使用说明中,在翻页代码中对表查询默认是全部字段也就是*,这样是不是会浪费资源,而无法查询需要的字段,于是我在DLL代码中新加入一个变量名为zdName,作为传递可控制查询条件的变量,同时在SQL存储过程中也加入相应的接受变量@zdName 字符型。 在这个小问题解决后,又在使用上发现cls.strWhere付给它的变量StrW 如果条件变量其中带有类似 例如 a='b'则执行SQL存储过程时候会提示错误,后来发现是DLL代码中: sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",'" & strWhere & "' " 这个地方是否写的不够严谨,在StrW中如果含有单引,那么将无法执行,所以我在DLL的VB代码改成 If InStr(strWhere, "'") 0 Then sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",""" & strWhere & """ " Else sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",'" & strWhere & "' " End If 试了试目前的问题确实解决了,这个组件我也是刚刚使用,希望对大家能有点帮助!
通用OA系统源代码(asp.net)包含完整源代码数据库,除了具有传统OA的邮件、工作流、文档等功能外,还引进了项目管理知识管理的思想,更加注重工作任务的分解、协同监督;知识的积累、沉淀分享,多条件跳转的分支流更为特色,有效为企业构筑协同工作平台 我的任务:今天未完成任务列表 我的邮件:最新收到的邮件列表 我的文档:最新归档的项目文档 我的审批:待我审批的项目文档 考勤:成员上下班的考勤 全文检索:对系统中项目文档的全文检索,并有权限过滤机制 系统设置各类接点:系统的权限中心配置中心 人员管理:系统账户;由系统管理员添加、修改;可以定义新增、离职、调职还可自定义查询 职位管理:组织内的职位结构树,是权限的基本结构 角色管理:权力的集合,可以自由定义。系统默认的有组长、组员系统成员。 修改口令:成员修改自己的口令(系统管理员在成员模块中修改口令) 考勤查询:查询包括自己在内的考勤纪录,或系统指定的成员如人事助理可查全部成员 考勤设置:考勤日考勤时间的设置 公司论坛:包括公司公告各版块BBS;有BBS管理权可以添加桌面公告版块公告,版主可以自由添加版块版块公告。BBS的功能同常见的,但无须登录; 客户管理(客户接触点的管理) 我的客户:显示由我负责的客户信息,并添加接触纪录(电话、拜访等) 查询、统计:客户资料的统计分析,销售人员的业绩管理 我的联系人 公司内部联系人:系统成员列表中获得 公司外部联系人:等同于公司客户的联系人 自定义联系人:管理私人的联系人 我的任务:(含任务协同、任务指派、任务查询) 待完成任务:显示今日往后的未完成任务,并对任务操作,如新建、取消、完成、接受 未完成任务:显示今日以前的未完成任务 已完成任务:显示完成的任务 我的发起任务:显示所有我发起的任务,其中包括我仅发起而不执行的指派任务 订阅/查询任务:显示我不参加的任务,查询他人的任务 我的邮件 收件箱:我收到的邮件,全部显示 发件箱 :我曾经发送的邮件,全部显示 废件箱 :我删除的收到过的的邮件 撰写新邮件:可以有项目属性,并可归档 公文流转 待批文档:流程走到我这里的文档,等待我处理 我的申请:我发起的流转申请 已批文档:从我这里过的,被我处理过的文档 流程管理:由我创建管理的流程,需要制定环节绑定角色 拟稿箱:我可以发起的文档流转的入口,凡流程的第一环节有我的,都显示;并可以对流程有条件查询 我的文档 已归档:我可以查看的已归档项目文档 待审批:正等待我审批的项目文档;审批权包括角色指定,或是项目组长。 公司项目:项目树的管理,每人看到自己参与的项目内容或权限赋予的内容 投递文档:对该项目投递相关的文档 撰写邮件:对该项目组成员发送邮件 项目管理:项目的创建、删除、修改、移动 成员管理:项目成员的添加、删除;组长的标记;组员权限的变更 项目订阅:显示我关心的项目内容(本人并不是项目成员,但有权查看) 目录管理:创建项目文档库,并有严格权限限制,文档目录可扩展 短信管理: 站内短信:系统内的消息机制 站外手机短讯:发送多个附加手机号码 USB_Key 设置:对硬件加密的设置.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值