C# Entity Framework 4.3和SQL Server Compact Edition 3.5更新缓慢
我正在开发一个WPF应用程序,它使用SQLServerCompactEdition数据库和实体框架,但更新和删除的性能非常慢。因此,我创建了一个简单的C# Entity Framework 4.3和SQL Server Compact Edition 3.5更新缓慢,c#,entity-framework,sql-server-ce,C#,Entity Framework,Sql Server Ce,我正在开发一个WPF应用程序,它使用SQLServerCompactEdition数据库和实体框架,但更新和删除的性能非常慢。因此,我创建了一个简单的Foobarconsole应用程序(如下),并遇到了同样的问题 我知道实体框架会产生一些开销,而且SQLServerCompactEdition比普通SQLServer慢。但是插入和更新/删除之间有这么大的区别吗 Main public static void CreateFoobars() { DateTime s
Foobar
console应用程序(如下),并遇到了同样的问题
我知道实体框架会产生一些开销,而且SQLServerCompactEdition比普通SQLServer慢。但是插入
和更新/删除
之间有这么大的区别吗
Main
public static void CreateFoobars()
{
DateTime start = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
Foobar foobar = new Foobar();
foobar.FoobarID = i;
foobar.Column1 = "Column1";
foobar.Column2 = "Column2";
foobar.Column3 = "Column3";
foobar.Column4 = "Column4";
_localRepository.CreateFoobar(foobar);
}
bool result = _localRepository.Save();
TimeSpan timeSpan = CalculateTimeSpan(start, DateTime.Now);
Console.WriteLine("Created Foobars? {0}, Time: {1}", result, timeSpan);
}
public static void CountFoobars()
{
Console.WriteLine("Count Foobars: {0}", _localRepository.GetAllFoobars().Count());
}
public static void UpdateFoobars()
{
DateTime start = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
Foobar foobar = new Foobar();
foobar.FoobarID = i;
foobar.Column1 = "Column11";
foobar.Column2 = "Column22";
foobar.Column3 = "Column33";
foobar.Column4 = "Column44";
_localRepository.UpdateFoobar(foobar);
}
bool result = _localRepository.Save();
TimeSpan timeSpan = CalculateTimeSpan(start, DateTime.Now);
Console.WriteLine("Updated Foobars? {0}, Time: {1}", result, timeSpan);
}
public static void DeleteFoobars()
{
DateTime start = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
_localRepository.DeleteFoobar(i);
}
bool result = _localRepository.Save();
TimeSpan timeSpan = CalculateTimeSpan(start, DateTime.Now);
Console.WriteLine("Deleted Foobars? {0}, Time: {1}", result, timeSpan);
}
publicstaticvoidcreatefoobars()
{
DateTime start=DateTime.Now;
对于(int i=0;i<10000;i++)
{
Foobar Foobar=新Foobar();
foobar.FoobarID=i;
foobar.Column1=“Column1”;
foobar.Column2=“Column2”;
foobar.Column3=“Column3”;
foobar.Column4=“Column4”;
_CreateFoobar(foobar);
}
bool result=_localRepository.Save();
TimeSpan TimeSpan=CalculateTimeSpan(开始,日期时间.Now);
WriteLine(“创建的Foobars?{0},时间:{1}”,结果,时间跨度);
}
公共静态void CountFoobars()
{
WriteLine(“Count Foobars:{0}”,_localRepository.GetAllFoobars().Count());
}
publicstaticvoidupdatefobar()
{
DateTime start=DateTime.Now;
对于(int i=0;i<10000;i++)
{
Foobar Foobar=新Foobar();
foobar.FoobarID=i;
foobar.Column1=“Column11”;
foobar.Column2=“Column22”;
foobar.Column3=“Column33”;
foobar.Column4=“Column44”;
_localRepository.updatefobar(foobar);
}
bool result=_localRepository.Save();
TimeSpan TimeSpan=CalculateTimeSpan(开始,日期时间.Now);
WriteLine(“更新的Foobars?{0},时间:{1}”,结果,时间跨度);
}
公共静态void DeleteFoobars()
{
DateTime start=DateTime.Now;
对于(int i=0;i<10000;i++)
{
_localRepository.DeleteFoobar(i);
}
bool result=_localRepository.Save();
TimeSpan TimeSpan=CalculateTimeSpan(开始,日期时间.Now);
WriteLine(“删除的Foobars?{0},时间:{1}”,结果,时间跨度);
}
存储库
public IQueryable<Foobar> GetAllFoobars()
{
return _entities.Foobars;
}
public Foobar GetFoobar(int foobarID)
{
return _entities.Foobars.ByFoobarID(foobarID).FirstOrDefault();
}
public bool CreateFoobar(Foobar foobar)
{
try
{
_entities.AddToFoobars(foobar);
}
catch (Exception e)
{
}
return false;
}
public bool UpdateFoobar(Foobar foobar)
{
try
{
Foobar f = this.GetFoobar(foobar.FoobarID);
if (f != null)
{
f.Column1 = foobar.Column1;
f.Column2 = foobar.Column2;
f.Column3 = foobar.Column3;
f.Column4 = foobar.Column4;
return true;
}
}
catch (Exception e)
{
}
return false;
}
public bool DeleteFoobar(int foobarID)
{
try
{
Foobar f = this.GetFoobar(foobarID);
if (f != null)
{
_entities.DeleteObject(f);
return true;
}
}
catch (Exception e)
{
}
return false;
}
public bool Save()
{
try
{
this.Context.SaveChanges();
return true;
}
catch (Exception e)
{
}
return false;
}
public IQueryable GetAllFoobars()
{
返回_entities.Foobars;
}
公共Foobar GetFoobar(int foobarID)
{
返回_entities.Foobars.ByFoobarID(foobarID.FirstOrDefault();
}
公共bool CreateFoobar(Foobar Foobar)
{
尝试
{
_实体。AddToFoobar(foobar);
}
捕获(例外e)
{
}
返回false;
}
公共bool updatefobar(Foobar Foobar)
{
尝试
{
Foobar f=this.GetFoobar(Foobar.FoobarID);
如果(f!=null)
{
f、 Column1=foobar.Column1;
f、 Column2=foobar.Column2;
f、 Column3=foobar.Column3;
f、 Column4=foobar.Column4;
返回true;
}
}
捕获(例外e)
{
}
返回false;
}
公共bool DeleteFoobar(intFoobarid)
{
尝试
{
Foobar f=this.GetFoobar(foobarID);
如果(f!=null)
{
_实体。删除对象(f);
返回true;
}
}
捕获(例外e)
{
}
返回false;
}
公共bool Save()
{
尝试
{
this.Context.SaveChanges();
返回true;
}
捕获(例外e)
{
}
返回false;
}
结果(在配备SSD和16 RAM的i7上,较旧的C2D上的时间几乎翻了一番)
- 计数:0
- 创建foobar?对,时间:00:00:04:0700057
- 数一数吧:10000
- 更新Foobars?对,时间:00:00:59:8800838
- 数一数吧:10000
- 删除的foobar?对,时间:00:00:57:8000810
- 计数:0
- 懒散加载=错误
- 禁用数据库中的标识