SqlCeCommand ExecuteNonQuery性能问题

时间:2010-05-28 21:13:04

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

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

我被要求解决.Net / SqlServerCe应用程序的问题。具体而言,在针对db重复插入之后,性能变得越来越低。在一个实例中,在~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'等),而是该代码是否应该用于处理此数量的插入,或者我正在目击的爬行是否可以预期。

2 个答案:

答案 0 :(得分:1)

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

同时检查您的查询以确保您没有通过保留引用来泄漏内存。根据我使用CE的经验,你应该尽快处理你得到的每个IDisposable对象,因为你没有像在现代PC上那样奢侈的演出和内存......记忆可以快速变得宝贵。

答案 1 :(得分:1)

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