在我的 dot net core web api 中,我知道可用的 cpu 執行緒數和要處理的資料數。假設我有 8 個執行緒來處理 800 個資料更新請求。我該如何做才能讓每個執行緒并行處理 100 個資料更新請求?
(我是 .NET 核心多執行緒方面的新手,如果您不想共享代碼,我希望為初學者提供一個教程鏈接。)
這是我的代碼:
[HttpPatch("UpdateExams")]
public async Task < ActionResult < ResponseDto2 >> UpdateExam([FromBody] List < Exam > input) {
// I know the number of threads -- lets say 8
int tc = Process.GetCurrentProcess().Threads.Count;
// I know the number of inputs -- lets say 800
int ic = input.Count;
// how can I distribute 100 data update request per core so that they run parallelly ?
// note: it is an data update operation
// below is my current api code
using
var transaction = _context.Database.BeginTransaction();
try {
foreach(var item in input) {
Exam exam = await _context.Exams.Where(i => i.FormNo == item.FormNo && i.RegNo == item.RegNo).FirstOrDefaultAsync();
if (exam != null) {
exam.ExamRollno = item.ExamRollno;
_context.Exams.Update(exam);
await _context.SaveChangesAsync();
}
}
transaction.Commit();
} catch (Exception e) {
return StatusCode(StatusCodes.Status500InternalServerError, new ResponseDto2 {
Message = "Something went wrong. Please try again later",
Success = false,
Payload = new {
e.StackTrace,
e.Message,
e.InnerException,
e.Source,
e.Data
}
});
}
return StatusCode(StatusCodes.Status200OK, new ResponseDto2 {
Message = "Data Updated successfully",
Success = true,
Payload = null
});
}
uj5u.com熱心網友回復:
停止在執行緒中思考。當然,CPU 具有“核心”和“執行緒”,但其中一些寧愿做其他事情而不是為您的應用程式提供服務,例如保持作業系統正常運行并讓您的 Web 服務器回應其他請求。
我可以鏈接到Task Parallel Library,但您評論說您不想要任何 MS Docs 鏈接。
然后我將說明您實際在做什么:您正在使用物體框架進行批量匯入并為每個物體呼叫 SaveChanges()。沒有多少并行化有助于優化它。
有一些庫可以在沒有物體框架開銷的情況下在 SQL 中進行批量匯入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361688.html
標籤:网站 多线程 .net核心 asp.net-web-api .net-5
