I have this code which I found on StackOverflow :
public static class EntityFrameworkUtil
{
public static IEnumerable<T> QueryInChunksOf<T>(this IQueryable<T> queryable, int chunkSize)
{
return queryable.QueryChunksOfSize(chunkSize).SelectMany(chunk => chunk);
}
public static IEnumerable<T[]> QueryChunksOfSize<T>(this IQueryable<T> queryable, int chunkSize)
{
int chunkNumber = 0;
while (true)
{
var query = (chunkNumber == 0)
? queryable
: queryable.Skip(chunkNumber * chunkSize);
var chunk = query.Take(chunkSize).ToArray();
if (chunk.Length == 0)
yield break;
yield return chunk;
chunkNumber++;
}
}
}
I use this like this :
int counter = 0;
foreach (var chunk in _sdb.Posts.OrderBy(c => c.Id).QueryChunksOfSize(100))
{
foreach(var post in chunk)
{
post.Floor= CorrectFloor(post);
post.RealAge= AgeCalculator(post);
post.Area= TerasCheck(post);
_sdb.Entry(post).State = System.Data.Entity.EntityState.Modified;
counter++;
}
_sdb.SaveChanges();
Console.WriteLine("SaveChanges worked, counter : " + counter);
}
This code is supposed to update 300000 rows. The code was working fast at first, but now it works very slowly and it's on 30000th row. Can you tell me why this code is running slowly and how can I make it faster? Thanks.