Os desenvolvedores podem estar certos. No mundo do .Net, coleta de lixo e liberação de memória acontecem quando necessário. Ou seja se houver bastante memória disponível para o aplicativo, ela poderá consumir mais e mais, até que o sistema operacional não permita mais alocação. Você não deve se preocupar com isso, a menos que realmente cause problemas.
Naturalmente, pode haver vazamentos de memória, se o aplicativo não descartar corretamente recursos não gerenciados, como soquetes, manipuladores de arquivos, etc. Observe os objetos do sistema operacional (no gerenciador de tarefas, é possível habilitar as colunas handles e objetos do usuário) para ver como eles crescem.
Como você afirmou, o uso incorreto do objeto da Aplicação ou da Sessão também pode ser uma causa.
Estou me perguntando por que você teria 48 pools de aplicativos (processos de trabalho). Isso é um exagero e você não precisa disso.
O GC gerencia a memória por processo e 400 MB por processo não é muito. Reduza o número de pools de aplicativos para o nr. de núcleos - 1 e, em seguida, teste de estresse no aplicativo. Se, então, crescer muito, você pode se preocupar com vazamentos de memória.
Com base em suas informações adicionais, sim, nesse caso, a lista de histórico crescerá indefinidamente. Objetos estáticos são criados uma vez por domínio de aplicativo e residem até que o appdomain viva.
Eu não aconselho você a remover arbitrariamente a palavra-chave estática, a menos que você saiba que não quebra a lógica de alguma aplicação. Investigue por que esses dados são coletados de qualquer maneira e para que são usados. O código também tem outro problema - ele não é thread-safe, seu comportamento é indefinido quando dois pedidos chegam ao mesmo tempo e decide adicionar dados a essa lista.
É melhor mover sua pergunta para stackoverflow.com, pois é uma questão de programação e não administrativa.
Se você não estiver controlando esse código e realmente quiser apenas resolver seu problema de memória, poderá configurar seus apps para reciclar após um número X de solicitações, ou depois que eles obtiverem mais do que a quantidade de memória Y, mas novamente isso não é uma solução real.