在 foreach 循环中将 base64 字符串添加到数组列表需要很长时间才能在 azure 服务器中响应 return

Adding base64 string to array list in foreach loop takes long time in azure server to return response

我有一个全栈应用程序,其中前端应用程序使用 angular,后端应用程序使用 .Net Core 5 web api。

该应用程序在本地环境中运行良好,api returns 以微秒为单位响应,但在生产中 api 需要 7 到 10 分钟才能响应。从数据库中拉取的数据并不大;仅从数据库中提取了 400 个客户端。

在调查问题后,我发现一个 base64 字符串是通过转换数组图像的字节而形成的。将转换后的字符串添加到数组列表中会导致 api 从服务器拉取数据的速度非常慢。

下面是部分代码实现。

我的界面Class

{
    List<ClientsList> GetClientsList();
}

我的服务Class

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; }
}

我的控制器Class

[HttpGet()]public List<ClientsList> GetClientsList()
{
    return ClientsManagerInterface.GetClientsList();
}

我应该最小化 base64 字符串吗?或者我还应该做什么?

当字符串很短时——例如当base64Image = "jejrhwejrhehrjehrhwejrhwejrwerhwjerhwejrhwje"时——api会在几微秒内提取数据。当字符串变大时问题就来了。

我尝试通过硬编码将字符串最小化,并且成功了,但是字节数组图像的转换导致了一个大的 base64 字符串,并且出现了问题。

不要 return 将完整的图像数据作为此 API 调用的一部分发送给客户端! 难怪它很慢,如果你正在尝试return 同一响应中的几百张图片。根据每个图像的大小,您可能会尝试传输超过 1 GB 的数据,所有这些都必须在 angular 甚至可以开始对其执行任何操作之前接收到。对于试图在移动设备和数据计划上加载该应用程序的人,我感到特别抱歉。

相反,return URL 对于您的应用可以与 <img />src 属性一起使用的每个图像元素.

您可能还想考虑对这些数据进行分页,并且一次只return分页一页的数据。