Анализатор обнаружил потенциальную утечку ресурса. Если при создании объекта выбрасывается исключение, то внутренний объект, уже успешно созданный, не будет корректно освобождён.
Рассмотрим пример:
public void EditFile(string f)
{
using (BufferedStream os = new BufferedStream(new FileStream(f,
FileMode.Open)))
{
....
}
}
В рассматриваемом примере возможна ситуация, когда создастся объект класса FileStream, а при создании объекта класса BufferedStrem произойдёт исключение. Такими образом, метод Dispose не будет вызван, и дескриптор файла не будет очищен.
Чтобы обезопасить свой код, можно сделать следующее:
public void EditFile(string f)
{
using (FileStream fileStream = new FileStream(f, FileMode.Open))
{
using (BufferedStream os = new BufferedStream(fileStream))
{
....
}
}
}
При такой реализации с помощью инструкции using заранее создаётся объект класса FileStream, который затем будет удалён, тем самым предотвращая утечку ресурса.
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки утечек памяти, незакрытых файловых дескрипторов и дескрипторов сетевых соединений [* см. примечание касательно языков C#, Java]. |
Данная диагностика классифицируется как: