2010-05-28 54 views
1

更新:我已修改代码以在插入之前删除索引,但它没有区别。SqlCeCommand ExecuteNonQuery性能问题

我被要求解决.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”是等),但这个代码,而是否应该期望处理这个号码的插入,或者如果我目击的爬行是预期的。

回答

1

我会看看Table1上的索引。如果它索引严重,查询可能会因索引中的页面填满而变得更加昂贵。确保你没有过度索引,并且你的索引已经正确设置。

还检查你的查询,以确保你没有通过坚持参考泄漏内存的地方。根据我对CE的经验,你应该尽快处置你获得的每个IDisposable对象,因为你没有像在现代PC上那样拥有豪华的内存和演出的内存......内存可以变得非常珍贵。

+0

当我意外地解开了我的赞成票,它不会让我重新注册。赶快行动吧! – 2010-05-28 21:38:05

+0

我想这里还有别的东西,或许是模拟器的问题。尽管如此,指数仍然是首先看好的地方。 – Michael 2010-06-03 16:01:06

1

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

+0

他们没有在交易中执行。 – Michael 2010-05-28 21:30:25

+0

当然,检查是否索引是一个问题。 – 2010-05-28 21:37:03