微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实体框架 – 具有Identity列的SQL Server Compact 4.0表中插入的性能会出现性能下降

编辑:以下问题已在实体框架6中修复.

运行下面的代码令人失望的2分10秒.第二次运行需要6.5分钟.这个问题与this one有关

Private Sub Runtest()
    Dim sw As New Stopwatch
        sw.Restart()
        Using db As New TestDB
            db.Configuration.AutoDetectChangesEnabled = False
            For n = 1 To 100
                For m = 1 To 100
                    db.Tops.Add(New Top)
                Next
            Next
            db.SaveChanges()
        End Using
        MsgBox(sw.Elapsed.ToString)
    End Sub

实体:

Public Class Top
    Public Sub New()
        MyBase.New()
        One = "arerjlwkerjglwejrglwergoiwerhgiowehrowerlwelfvbwlervbowerghpiweurhgpiwuerviiervljwebbrlvjnepvjnweprvupiweurv"
        Two = "w;lrjgwwergkjwervgjwelrgjhwelghlwekglwergiuwehrgwjergjwervgjwerjgnwekrngpwergjpowergllwejrnglkwerngpoierhpiiuewrpjwenrwenrv;lwenrvkjernpgpsrvpi"

    End Sub

    'ID'
    Public Property ID As Integer

    'NATIVE PROPERTIES'
    Public Overridable Property One As String
    Public Overridable Property Two As String

    'NAVIGATION PROPERTIES'

End Class

在第二级交互中移动Using块并调用SaveChanges会使它变得更糟.

TestDB只是继承了DBContext而没有任何进一步的配置.当我禁用Top.ID属性数据库生成并自己提供ID时,性能提高了30倍.这个问题使得在sql Server Compact中使用数据库生成的ID变得不可能.除了使用客户端生成的ID之外,还有其他解决方案吗?

解决方法

我发现了这个问题,它是由获取生成的id引起表扫描的语句引起的,我在这里提出了一个修复,用4000个实体测试,从17秒到2秒. http://entityframework.codeplex.com/workitem/857 – 它将包含在Alpha 3之后的EF6版本中

原文地址:https://www.jb51.cc/mssql/80127.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐