Entity Framework с Web Api 2 - проблема производительности - PullRequest
0 голосов
/ 24 августа 2018

Прежде всего, я хочу сказать, что я новичок в .NET, и я новичок в английском.: (

У меня есть следующий код в контроллере: я хочу отправить набор данных клиентам. Мне нужно выполнить эту обработку, чтобы обеспечить подходящую визуализацию в приложении переднего плана. Однако я заметилчто выполнение кода очень медленное, особенно когда выполняется первое условное выражение. Переменная «result» содержит все мои данные, и на самом деле ее размер небольшой, всего около 40 записей (result.Count () - 40).

var response = new List<object>();
//the results are retrieved quickly from the database

var result = (from a in obj.TBRelPadraoCorEstado
              join b in obj.TBCorAlarme on a.idCor equals b.idCor
              join c in obj.TBEstadoAlarme on a.idEstado equals c.idEstado
              join d in obj.TBPadraoCor on a.idPadrao equals d.idPadraoCor
              select new
              {
                  idRelPadraoCor = a.idRelPadraoCor,
                  idPadrao = (int)d.idPadraoCor,
                  nomePadrao = d.nomePadrao,
                  idEstado = a.idEstado,
                  idCor = a.idCor,
                  hexCor = b.hexCor,
                  nomeCor = b.nomeCor,
                  estadoAlarme = c.estadoAlarme,
                  permiteReconhecimento = a.permiteReconhecimento,
                  isReconhecido = a.isReconhecido,
                  prioridade = a.prioridade
              }).OrderBy(d => d.idPadrao).AsEnumerable();

int size = result.Count();
List<object> buffer = new List<object>();

for (int i = 0; i < size - 1; i++)
{
    //at this point, the code execution become very slow.
    if ((int)result.ElementAt(i).idPadrao == (int)result.ElementAt(i + 1).idPadrao)
    {
        buffer.Add(new
        {
            idRelPadraoCor = result.ElementAt(i).idRelPadraoCor,
            idPadrao = result.ElementAt(i).idPadrao,
            idEstado = result.ElementAt(i).idEstado,
            idCor = result.ElementAt(i).idCor,
            hexCor = result.ElementAt(i).hexCor,
            nomeCor = result.ElementAt(i).nomeCor,
            estadoAlarme = result.ElementAt(i).estadoAlarme,
            permiteReconhecimento = result.ElementAt(i).permiteReconhecimento,
            isReconhecido = result.ElementAt(i).isReconhecido,
            prioridade = result.ElementAt(i).prioridade
        });
   }
    else
    {
        buffer.Add(new
        {
            idRelPadraoCor = result.ElementAt(i).idRelPadraoCor,
            idPadrao = result.ElementAt(i).idPadrao,
            idEstado = result.ElementAt(i).idEstado,
            idCor = result.ElementAt(i).idCor,
            hexCor = result.ElementAt(i).hexCor,
            nomeCor = result.ElementAt(i).nomeCor,
            estadoAlarme = result.ElementAt(i).estadoAlarme,
            permiteReconhecimento = result.ElementAt(i).permiteReconhecimento,
            isReconhecido = result.ElementAt(i).isReconhecido,
            prioridade = result.ElementAt(i).prioridade
        });
        var copyList = new List<object>(buffer);
        response.Add(new { nomePadrao = result.ElementAt(i).nomePadrao, idPadrao = result.ElementAt(i).idPadrao, stateSet = copyList });
        buffer = new List<object>();
    }
}

return Ok(response);

Чтобы понять мою проблему: если я отправляю только контент «результата», это занимает около 40 миллисекунд. С другой стороны, если я выполняю фрагмент цикла, это занимает около 8000 или даже10000 миллисекунд ![enter image description here] 1

Может кто-нибудь рассказать мне о происходящем?

Спасибо за ваше терпение.

...