Мне удалось улучшить производительность веб-приложений, чтобы они были на 10% быстрее, чем раньше.При этом я заметил, что использование памяти удвоилось !!!
Тестовое приложение выполняет: вызывает веб-сервис, выполняет сложные бизнес-действия * [количество пользователей] * [количество раз]
Я проверяю свой код изменения, но ничто не вызывает подозрений в использовании большего количества памяти ... (все, что я сделал, это удалил строки кода, сериализовавшего DataSet, в байт [] и сохранил его в кеше). Я проверял снова и снова вмногопоточный тест:
- По мере того, как я пропускал все больше и больше кода ( производительность улучшена - память увеличилась )
- Когда я повторял плохой код в цикле (производительность былаплохая память вышла из строя)
Может ли кто-нибудь объяснить, почему ????
Код ниже:
До: (Время цикла: 100% Память 100%)
outStream = new MemoryStream();
new BinaryFormatter().Serialize(outStream, stateData);
outStream.Close();
SessionSettings.StateData_Set(stateId, outStream.ToArray());
outStream.Dispose();
После варианта 1: (Время цикла: 200% памяти 50%)
for (int i = 0; i < 20; i++)
{
outStream = new MemoryStream();
new BinaryFormatter().Serialize(outStream, stateData);
}
outStream.Close();
SessionSettings.StateData_Set(stateId, outStream.ToArray());
outStream.Dispose();
После варианта 2: (Время цикла: 90% памяти 200%)
//outStream = new MemoryStream();
//new BinaryFormatter().Serialize(outStream, stateData);
//outStream.Close();
SessionSettings.StateData_Set(stateId, null);
//outStream.Dispose();
SessionSettings.StateData_Set помещает объект в
dictionary<string,dictionary<string, object>>
, что означает
<Sessions<DataKey,DataObject>>
в конце oВ каждом цикле внутренний словарь удаляет запись, и в конце каждого пользовательского сеанса весь внутренний словарь удаляется из внешнего словаря.