谁认为实体框架的性能还行的人进来谈谈.
看看测试结果.然后大家看看怎么优化实体框架.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HD01SystemModels;
using Model;
using Qin.Data;
using CYQ.Data;
namespace SystemQuestionProc
{
class Program
{
public static List<EventBaseSet> GetEventBaseSetListWhere(string sqlWhere)
{
List<EventBaseSet> list = new List<EventBaseSet>();
var sql = "select * from EventBaseSet";
if (sqlWhere != "") sql += " where " + sqlWhere;
var reader = DBTool.Database.GetDbDataReader(sql);
while (reader.Read())
{
var data = new EventBaseSet();
data.EventID = reader.GetInt64(0);
data.EventName = reader.GetString(1);//注意此字段可能为空
data.Domain = reader.GetString(2);//注意此字段可能为空
data.StartTime = reader.GetDateTime(3);//注意此字段可能为空
data.EndTime = reader.GetDateTime(4);//注意此字段可能为空
//data.LogoPath=reader.GetString(5);//注意此字段可能为空
//data.Descript=reader.GetString(6);//注意此字段可能为空
data.CreateTime = reader.GetDateTime(7);//注意此字段可能为空
//data.Layout=reader.GetString(8);//注意此字段可能为空
data.Style = reader.GetInt32(9);
data.EventType = reader.GetInt32(10);//注意此字段可能为空
data.ShowContactInfo = reader.GetBoolean(11);//注意此字段可能为空
data.ShowMemo = reader.GetString(12);//注意此字段可能为空
data.ShowLock = reader.GetBoolean(13);//注意此字段可能为空
//data.RegistMemo=reader.GetString(14);//注意此字段可能为空
data.RegistLock = reader.GetBoolean(15);//注意此字段可能为空
data.SugestLock = reader.GetBoolean(16);//注意此字段可能为空
//data.BackGroundImg=reader.GetString(17);//注意此字段可能为空
data.EventStage = reader.GetInt32(18);//注意此字段可能为空
data.ShowName = reader.GetBoolean(19);//注意此字段可能为空
data.ShowLogo = reader.GetBoolean(20);//注意此字段可能为空
data.ShowLink = reader.GetBoolean(21);//注意此字段可能为空
//data.AwardTime=reader.GetString(22);//注意此字段可能为空
//data.HeadBGColor=reader.GetString(23);//注意此字段可能为空
//data.HeadBGImage=reader.GetString(24);//注意此字段可能为空
//data.BodyBGColor=reader.GetString(25);//注意此字段可能为空
//data.BodyBGImage=reader.GetString(26);//注意此字段可能为空
data.NowPeriodID = reader.GetInt32(27);
data.UpdateTime = reader.GetDateTime(28);
data.EnabledHeadHtml = reader.GetBoolean(29);
data.EnabledFooterHtml = reader.GetBoolean(30);
//data.HeadHtml=reader.GetString(31);//注意此字段可能为空
// data.FooterHtml=reader.GetString(32);//注意此字段可能为空
data.LimitJoinnerCount = reader.GetInt32(33);
data.Days = reader.GetInt32(34);
//data.WhyClose=reader.GetString(35);//注意此字段可能为空
data.Xuan = reader.GetString(36);
data.AddToPlatformHomePage = reader.GetBoolean(37);
//data.VisitedCount=reader.GetInt64(38);//注意此字段可能为空
//data.AddToUion=reader.GetBoolean(39);//注意此字段可能为空
data.EventModelSelect_SelectID = reader.GetInt32(40);
data.Creater_CreaterID = reader.GetInt32(41);
data.UserRegistSelected_ID = reader.GetInt32(42);
list.Add(data);
}
reader.Close();
return list;
}
public static void Main(string[] args)
{
var t1=DateTime.Now.Ticks;
for (int i = 0; i < 50; i++) {
using(MAction action = new MAction("EventBaseSet"))
{
if (action.Fill("EventID=2"))//查询ID>888的结果中取ID最大的的单行数据
{
var data=action.Data.ToEntity<Model.EventBaseSet>();//UserInfo为实体类。
}
}
}
Console.WriteLine("------CYQ.Data的测试-----");
var t2=DateTime.Now.Ticks;
Console.WriteLine(t2-t1);
Console.WriteLine("-------------------------------");
var t3=DateTime.Now.Ticks;
for (int i = 0; i < 50; i++) {
var sql="select * from EventBaseSet where EventID=2";
var data=DBTool.Database.GetEntity<EventBaseSet>(sql);
}
Console.WriteLine("------Qin.Data的测试-----");
var t4=DateTime.Now.Ticks;
Console.WriteLine(t4-t3);
Console.WriteLine("-------------------------");
var t5=DateTime.Now.Ticks;
for (int i = 0; i < 50; i++) {
var data=GetEventBaseSetListWhere(" EventID=2")[0];
}
Console.WriteLine("------纯sql的测试-----");
var t6=DateTime.Now.Ticks;
Console.WriteLine(t6-t5);
Console.WriteLine("-------------------------");
var t7=DateTime.Now.Ticks;
for (int i = 0; i < 50; i++) {
using (HD01SystemDBEntities db2=new HD01SystemDBEntities()){
var data=db2.EventBaseSet.First(m => m.EventID == 2);
}
}
Console.WriteLine("------实体框架的测试-----");
var t8=DateTime.Now.Ticks;
Console.WriteLine(t8-t7);
Console.WriteLine("-------------------------");
Console.WriteLine("Press any key to continue . . . ");
Console.Read();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HD01SystemModels;
using Model;
using Qin.Data;
using CYQ.Data;
namespace SystemQuestionProc
{
class Program
{
public static List<EventBaseSet> GetEventBaseSetListWhere(string sqlWhere)
{
List<EventBaseSet> list = new List<EventBaseSet>();
var sql = "select * from EventBaseSet";
if (sqlWhere != "") sql += " where " + sqlWhere;
var reader = DBTool.Database.GetDbDataReader(sql);
while (reader.Read())
{
var data = new EventBaseSet();
data.EventID = reader.GetInt64(0);
data.EventName = reader.GetString(1);//注意此字段可能为空
data.Domain = reader.GetString(2);//注意此字段可能为空
data.StartTime = reader.GetDateTime(3);//注意此字段可能为空
data.EndTime = reader.GetDateTime(4);//注意此字段可能为空
//data.LogoPath=reader.GetString(5);//注意此字段可能为空
//data.Descript=reader.GetString(6);//注意此字段可能为空
data.CreateTime = reader.GetDateTime(7);//注意此字段可能为空
//data.Layout=reader.GetString(8);//注意此字段可能为空
data.Style = reader.GetInt32(9);
data.EventType = reader.GetInt32(10);//注意此字段可能为空
data.ShowContactInfo = reader.GetBoolean(11);//注意此字段可能为空
data.ShowMemo = reader.GetString(12);//注意此字段可能为空
data.ShowLock = reader.GetBoolean(13);//注意此字段可能为空
//data.RegistMemo=reader.GetString(14);//注意此字段可能为空
data.RegistLock = reader.GetBoolean(15);//注意此字段可能为空
data.SugestLock = reader.GetBoolean(16);//注意此字段可能为空
//data.BackGroundImg=reader.GetString(17);//注意此字段可能为空
data.EventStage = reader.GetInt32(18);//注意此字段可能为空
data.ShowName = reader.GetBoolean(19);//注意此字段可能为空
data.ShowLogo = reader.GetBoolean(20);//注意此字段可能为空
data.ShowLink = reader.GetBoolean(21);//注意此字段可能为空
//data.AwardTime=reader.GetString(22);//注意此字段可能为空
//data.HeadBGColor=reader.GetString(23);//注意此字段可能为空
//data.HeadBGImage=reader.GetString(24);//注意此字段可能为空
//data.BodyBGColor=reader.GetString(25);//注意此字段可能为空
//data.BodyBGImage=reader.GetString(26);//注意此字段可能为空
data.NowPeriodID = reader.GetInt32(27);
data.UpdateTime = reader.GetDateTime(28);
data.EnabledHeadHtml = reader.GetBoolean(29);
data.EnabledFooterHtml = reader.GetBoolean(30);
//data.HeadHtml=reader.GetString(31);//注意此字段可能为空
// data.FooterHtml=reader.GetString(32);//注意此字段可能为空
data.LimitJoinnerCount = reader.GetInt32(33);
data.Days = reader.GetInt32(34);
//data.WhyClose=reader.GetString(35);//注意此字段可能为空
data.Xuan = reader.GetString(36);
data.AddToPlatformHomePage = reader.GetBoolean(37);
//data.VisitedCount=reader.GetInt64(38);//注意此字段可能为空
//data.AddToUion=reader.GetBoolean(39);//注意此字段可能为空
data.EventModelSelect_SelectID = reader.GetInt32(40);
data.Creater_CreaterID = reader.GetInt32(41);
data.UserRegistSelected_ID = reader.GetInt32(42);
list.Add(data);
}
reader.Close();
return list;
}
public static void Main(string[] args)
{
var t1=DateTime.Now.Ticks;
for (int i = 0; i < 50; i++) {
using(MAction action = new MAction("EventBaseSet"))
{
if (action.Fill("EventID=2"))//查询ID>888的结果中取ID最大的的单行数据
{
var data=action.Data.ToEntity<Model.EventBaseSet>();//UserInfo为实体类。
}
}
}
Console.WriteLine("------CYQ.Data的测试-----");
var t2=DateTime.Now.Ticks;
Console.WriteLine(t2-t1);
Console.WriteLine("-------------------------------");
var t3=DateTime.Now.Ticks;
for (int i = 0; i < 50; i++) {
var sql="select * from EventBaseSet where EventID=2";
var data=DBTool.Database.GetEntity<EventBaseSet>(sql);
}
Console.WriteLine("------Qin.Data的测试-----");
var t4=DateTime.Now.Ticks;
Console.WriteLine(t4-t3);
Console.WriteLine("-------------------------");
var t5=DateTime.Now.Ticks;
for (int i = 0; i < 50; i++) {
var data=GetEventBaseSetListWhere(" EventID=2")[0];
}
Console.WriteLine("------纯sql的测试-----");
var t6=DateTime.Now.Ticks;
Console.WriteLine(t6-t5);
Console.WriteLine("-------------------------");
var t7=DateTime.Now.Ticks;
for (int i = 0; i < 50; i++) {
using (HD01SystemDBEntities db2=new HD01SystemDBEntities()){
var data=db2.EventBaseSet.First(m => m.EventID == 2);
}
}
Console.WriteLine("------实体框架的测试-----");
var t8=DateTime.Now.Ticks;
Console.WriteLine(t8-t7);
Console.WriteLine("-------------------------");
Console.WriteLine("Press any key to continue . . . ");
Console.Read();
}
}
}
总结:
1.实体框架的查询可想而知,这也是我为什么不用它的原因,如果还有异议请告知我如何提高此性能.
2.CYQ.DATA设计方案中的纯反射导致性能降低,建议秋天兄改进之.
3.纯的sql实现,其实我已经写了一个代码生成器,所有的生成代码作为一个不变数据层(不牵扯业务逻辑),也是没有影响的,但我后来发现
当系统中存在着DBNULL时,MSIL的实现方式速度会反而高于纯sql.
如果关注的各路英雄有什么建议和反驳的意见请以实际出发数据说话.请指教
少侠,我看你气度不凡天赋异禀,骨骼精奇,这么帅,来了就帮推荐一把吧
我的最近更新