DataContext当数据量很大时,性能很差

时间:2011-10-04 07:54:56

标签: c# database silverlight windows-phone-7

如果我使用DataContext DB来存储大量数据。 我发现数据数量增长时性能会非常慢。

数据的数量约为6000条。

如果我插入一个数据和SubmitChange,则SubmitChange将花费1.X秒。

有没有办法改善表现,或者是限制......

感谢。

2 个答案:

答案 0 :(得分:2)

我自己没有测试过,但在每次插入后都尝试不调用SumbitChanges( )。 执行所有6000次插入,然后只调用SubmitChanges( )一次。 DataContext应该知道您所做的所有更改。

var _db = new YourDbContext( );

for( int i = 0; i < 6000; i++ )
{
    FoobarObj newObject = new FoobarObj( )
    {
        Name = "xyz_" + i.ToString( );
    };

    _db.FoobarObjects.InsertOnSubmit( newObject );
}

_db.SubmitChanges( );

答案 1 :(得分:1)

一秒钟听起来太长了。比我测量的时间长得多。在一个简单的测试中,我刚刚做了:

using(var dc = new MyDc(@"isostore:/stuff.sdf"))
{
    if(!dc.DatabaseExists())
       dc.CreateDatabase();

    dc.Data.InsertAllOnSubmit(
       Enumerable.Range(0, 6000).Select( i => new MyData { Data = "Hello World" }));
    dc.SubmitChanges();
}

我可以6000个批次以每毫秒1~2个项目的速度插入,随着数据大小的持续增长,这仍然非常稳定。如果我将它更改为较小的批次(比如说5个项目),则每个项目下降到大约10ms,因为初始化datacontext会占用相当多的开销并占据执行时间。

所以必须有其他事情发生。你能提供一些关于你插入的东西的细节吗?也许是一个端到端演示问题的代码示例?