DataContext Производительность плохая, когда число данных большое - PullRequest
1 голос
/ 04 октября 2011

Если я использовал DataContext DB для хранения большого количества данных. Я обнаружил, что при увеличении числа данных производительность будет очень и очень низкой.

Количество данных составляет около 6000 записей.

Если я вставлю одну информацию и SubmitChange, SubmitChange будет стоить 1.X секунд.

Есть ли способ улучшить производительность или это ограничение .....

Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

Я сам не проверял, но стараюсь не звонить 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 голос
/ 07 октября 2011

Одна секунда звучит как слишком длинная. Гораздо дольше, чем я измерил. В тривиальном тесте я только что сделал:

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();
}

Я могу вставить со скоростью 1 ~ 2 элемента в мс в 6000 партий, и это оставалось довольно стабильным, так как размер данных продолжал расти. Если я изменю его на более мелкие партии (например, 5 элементов), то он упадет примерно до 10 мс на элемент, так как при инициализации текстового контекста довольно много накладных расходов, и это влияет на время выполнения.

Так что должно быть что-то еще происходит. Можете ли вы дать некоторые подробности о том, что вы вставляете? Может быть, пример кода, который демонстрирует проблему от начала до конца?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...