【问题标题】:SqlCeCommand ExecuteNonQuery performance issueSqlCeCommand ExecuteNonQuery 性能问题
【发布时间】:2010-05-28 21:13:03
【问题描述】:

更新:我已经修改了代码以在插入之前删除索引,但这没有区别。

有人要求我解决 .Net/SqlServerCe 应用程序的问题。具体来说,在对数据库重复插入之后,性能会越来越下降。在一个实例中约为 200 行,在另一个实例中约为 1000 行。在后一种情况下,使用的代码如下所示:

Dim cm1 As System.Data.SqlServerCe.SqlCeCommand = cn1.CreateCommand  
cm1.CommandText = "INSERT INTO Table1 Values(?,?,?,?,?,?,?,?,?,?,?,?,?)"  
For j = 0 To ds.Tables(0).Rows.Count - 1 'this is 3110  
    For i = 0 To 12  
        cm1.Parameters(tbl(i, 0)).Value = Vals(j,i) 'values taken from a different db  
    Next  
    cm1.ExecuteNonQuery()  
Next

细节并不是超级重要的(比如“tbl”是什么等),而是是否应该期望这段代码来处理这个数量的插入,或者我正在目睹的爬行是否可以预料。

【问题讨论】:

    标签: .net sql-server vb.net windows-ce


    【解决方案1】:

    我会看一下 Table1 上的索引。如果它被大量索引,随着索引中的页面填满,查询可能会变得更加昂贵。确保您没有过度索引,并且您的索引设置正确。

    还要检查您的查询,以确保您没有通过坚持引用而在某处泄漏内存。根据我使用 CE 的经验,你应该尽快处理你得到的每一个 IDisposable 对象,因为你没有像在现代 PC 上那样拥有大量 RAM 的奢侈......内存会很快变得宝贵。

    【讨论】:

    • 该死,我不小心取消了我的投票,它不会让我重新投票。坚果!
    • 我认为这里还有其他问题,可能是模拟器的问题。索引仍然是首先查看的逻辑位置。
    【解决方案2】:

    插入是否在单个事务中执行?或者,连接使用的isolation_level 是什么?广泛的锁定和阻塞可能会减慢速度。否则,查询看起来很简单。

    【讨论】:

    • 它们不是在事务中执行的。
    • 当然,检查索引是否有问题。
    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 2011-07-17
    • 2017-04-13
    • 2022-01-04
    • 1970-01-01
    • 2010-09-05
    • 2012-09-25
    相关资源
    最近更新 更多