Анализатор обнаружил потенциальную утечку ресурса. Если при создании объекта выбрасывается исключение, то внутренний объект, уже успешно созданный, не будет корректно освобождён.
Рассмотрим пример:
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 как критические и относятся к типу: Ошибки утечек памяти, незакрытых файловых дескрипторов и дескрипторов сетевых соединений. |
Данная диагностика классифицируется как: