I asked a question that was how can I run a task faster but none of the answers worked for me. I have the following code which inserts 1500 records to the database but the problem is it takes about 4 seconds. I used async/await
, parallel loop and AddRange
and also I disabled change auto detection and validation on save but none of them has effect. My code is this:
async void button7_Click(object sender, EventArgs e)
{
var task = await Task.Run(() =>
{
Random rnd = new Random();
for (int i = 0; i <= 1500; i++)
{
db.Tbls.Add(new Tbl()
{
Name = "User" + i + 1,
Num = rnd.Next(10, i + 10) / 10
});
}
db.SaveChanges();
return db.Tbls.Count();
});
}
And with AddRange:
async void button7_Click(object sender, EventArgs e)
{
var task = await Task.Run(() =>
{
Random rnd = new Random();
var tbls = new List<Tbl>();
for (int i = 0; i <= 1500; i++)
{
tbls.Add(new Tbl()
{
Name = "User" + i + 1,
Num = rnd.Next(10, i + 10) / 10
});
progress.Report(i * 100 / 1500);
}
db.Tbls.AddRange(tbls);
db.SaveChanges();
return db.Tbls.Count();
});
}
And with parallel loop:
var task = await Task.Run(() =>
{
int seed = Environment.TickCount;
var random = new ThreadLocal<Random>(() => new Random(Interlocked.Increment(ref seed)));
var tbls = new ConcurrentBag<Tbl>();
Parallel.For(0, 1500, (i) => {
tbls.Add(new Tbl()
{
Name = "User" + i + 1,
Num = random.Value.Next(10, i + 10) / 10
});
});
db.Tbls.AddRange(tbls);
db.SaveChanges();
return db.Tbls.Count();
});
Does anyone know what is the problem?