如果我使用DataContext DB来存储大量数据。 我发现数据数量增长时性能会非常慢。
数据的数量约为6000条。
如果我插入一个数据和SubmitChange,则SubmitChange将花费1.X秒。
有没有办法改善表现,或者是限制......
感谢。
答案 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会占用相当多的开销并占据执行时间。
所以必须有其他事情发生。你能提供一些关于你插入的东西的细节吗?也许是一个端到端演示问题的代码示例?