[英]How to increase code performance? multithread or Tasks in C#?
我有以下两个功能
void ParserData(List<DataObject> MyObjcets){
//loop over MyObjects
List<ResultObject> Results = new List<ResultObject> ();
foreach(var Obj in MyObjects){
//do some computation and add it to an instance of ResultObject
ResultObject R = new ResultObject();
Results.Add(R);
if(Results.count >= 2000){
//call a function that will insert Results to MYSQL DB
InsertDATA(Results);
//create empty Results list
Results = new List<ResultObject> ();
}
//
}
插入功能
void InsertDATA(List<ResultObject> Results){
foreach(var R in Results){
.....
//Insert Object to MYSQLDB
}
}
我当时想使此代码更快,但是我不确定最好的方法。 我每2000年提交一次插入的原因是因为此后系统内存不足。 有没有一种方法,在我发送要插入的数据之后,可以在插入发送的数据的同时继续执行更多的计算,而不必等到插入完成?
任何使该代码更快的建议将不胜感激。
根据您提供的信息-您可以对数据库方法使用async/await
方法。
使您的数据库插入方法异步
Task SaveResultAsync(ResultObject result)
{
var query = "INSERT ...."
using (var conn = new MySqlConnection(connectionString))
using (var command = new MySqlCommand(conn, query)
{
// command.AddParameter for values you want to insert
await conn.OpenAsync();
await command.ExecuteNonQueryAsync();
}
}
然后,您可以单独运行每个查询,而无需等待其他查询和结果
async Task ParserData(List<DataObject> MyObjcets)
{
var tasks = new List<Task>();
foreach(var Obj in MyObjects)
{
//do some computation and add it to an instance of ResultObject
ResultObject result = new ResultObject();
var task = SaveResultAsync(result );
tasks.Add(task);
}
await Task.WhenAll(tasks.ToArray());
}
当然,您也需要将ParseData
方法的签名更改为异步。
更改签名后, async/await
开始以僵尸的形式散布在您的应用程序中:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.