我有一個完整的堆疊應用程式,其中前端應用程式使用 Angular,后端應用程式使用 .Net Core 5 web api。
該應用程式在本地環境中運行良好,api 在微秒內回傳回應,但在生產中,api 需要 7 到 10 分鐘才能回應。從資料庫中拉取的資料不大;從資料庫中只提取了 400 個客戶端。
在調查了這個問題后,我發現 base64 字串是通過從陣列影像轉換位元組來制定的。將轉換后的字串添加到陣列串列中會導致 api 從服務器拉取資料的速度非常慢。
下面是一些代碼實作。
我的介面類
{
List<ClientsList> GetClientsList();
}
我的服務等級
public List<ClientsList> GetClientsList()`
{
var clients = _dbBconnection.employees.Include(x => x.Department).Include(y => y.EmployeeJobTitle);
if (clients != null)
{
List<ClientsList> clientsLists= new List<ClientsList>();
foreach (var data in clients )
{
var folderName = Path.Combine("Resources", "Images");
var filePath = folderName '\\' data.PassportSize;
var byteArrImg = File.ReadAllBytes(filePath);
var base64Img = Convert.ToBase64String(byteArrImg);
var employeeData = new ClientsList()
{
ClientId = data.ClientId,
Fname = data.Fname,
Mname = data.Mname,
Lname = data.Lname,
Dob = data.Dob,
Gender = data.Gender,
PhoneNo = data.PhoneNo,
ImageData = base64Img
};
clientsLists.Add(employeeData);
}
return clientsLists;
}
else
{ return null; }
}
我的控制器類
[HttpGet()]public List<ClientsList> GetClientsList()
{
return ClientsManagerInterface.GetClientsList();
}
我應該最小化base64字串嗎?或者我還應該做什么?
當字串很短時——例如當base64Image = "jejrhwejrhehrjehrhwejrhwejrwerhwjerhwejrhwje"——api在幾微秒內提取資料。當字串較大時,問題就來了。
我試圖通過硬線來最小化字串,并且它可以作業,但是位元組陣列影像的轉換會導致一個大的 base64 字串并且出現問題。
uj5u.com熱心網友回復:
作為此 API 呼叫的一部分,請勿將完整的影像資料回傳給客戶端!難怪它很慢,如果你試圖在同一個回應中回傳幾百張影像。根據每個影像的大小,您可能會嘗試傳輸千兆位元組的資料,在 Angular 甚至可以開始對其進行任何操作之前,必須接收所有這些資料。對于試圖在移動設備和資料計劃上加載該應用程式的人,我感到特別抱歉。
相反,為您的應用可以與元素屬性一起使用的每個影像回傳一個URL 。src<img />
您可能還想考慮對這些資料進行分頁,并且一次只回傳一頁的資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/449538.html
標籤:C# 网 。网 有角度的 asp.net-mvc
