Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Entity Framework 4.3和SQL Server Compact Edition 3.5更新缓慢_C#_Entity Framework_Sql Server Ce - Fatal编程技术网

C# Entity Framework 4.3和SQL Server Compact Edition 3.5更新缓慢

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

我正在开发一个WPF应用程序,它使用SQLServerCompactEdition数据库和实体框架,但更新和删除的性能非常慢。因此,我创建了一个简单的
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
测试

  • 懒散加载=错误
  • 禁用数据库中的标识

我怀疑您的创建功能更快,因为它只是创建10000个本地对象,然后一步将它们全部提交到数据库,而您的删除和更新功能在更改数据库之前都会查询数据库中的一个项目。

是的,但没有其他更新或删除方法吗?而且选择一个Foobar很快,那么为什么在更新或删除时性能会受到影响呢?使用实体框架时,SQL Compact Edition总是这么慢吗?如果是这样,那么我必须围绕SQL Express构建我的WPF应用程序,或者尝试在没有实体框架的情况下更新和删除。从未找到解决此问题的任何方法,我改为使用SQL Express。