Я присоединился к проекту вчера, мы решили объединить наши два проекта в один, и объединить функции обоих (они в основном нас поглотили).
Проблема в том, что у них где-то есть утечка памяти, имне поручили найти и убить его.
Я запустил анализ кода в Visual Studio и предложил длинный список предупреждений, большинство из которых мы можем игнорировать, а те, которые я пытаюсь исправить, - это проблемы.с удалением объекта.Что-то, на что я никогда не обращал особого внимания, и я удивлен, обнаружив, что получить анализ кода, чтобы решить, что что-то правильно, нелегко.
Код Начался так:
StreamWriter SW = new StreamWriter(File.Create("folder/file.txt"));
SW.WriteLine("text");
SW.WriteLine("text");
SW.WriteLine("text");
SW.WriteLine();
SW.WriteLine("text");
SW.WriteLine("text");
SW.WriteLine("text");
SW.Close();
SW.Flush();
Но Code Analysis сказал, что File.Create не удалялся по всем путям кода и что SW можно было утилизировать не раз, я пошел посмотреть и обнаружил, что вы не должны использовать и Close и Flush, и вНа самом деле, вы должны использовать оператор using, поэтому я изменил его на следующее:
using(StreamWriter SW = new StreamWriter(File.Create("folder/file.txt")))
{
SW.WriteLine("text");
SW.WriteLine("text");
SW.WriteLine("text");
SW.WriteLine();
SW.WriteLine("text");
SW.WriteLine("text");
SW.WriteLine("text");
}
Утилизируемый SW ушел, но он по-прежнему говорил, что File.Create не удалялся по всем путям кода, есть только один путь к коду, поэтому это не имело смысла, я попытался добавить отдельный оператор Using для File.Create и создать / записать файл отдельно, но анализ кода все равно его улавливает.
ЭтоПохоже, что-то, что было бы легко понять, если бы у VS не было ложного срабатывания или чего-то в этом роде.
В любом случае, спасибо, что дали мне время для чтенияthis.
~ EDIT
Я соврал в оригинальном посте, когда я добавляю оператор double using, в том числе когда я использую «Stream», он говорит мне, что объект может быть удален более одного раза, вызывая исключение объекта.Я предполагаю, что это было бы странно.так как я сам никогда не избавляюсь от него.
текущий код:
using (Stream stream = File.Create("folder/file.txt"))
{
using (StreamWriter SW = new StreamWriter(stream))
{
SW.WriteLine("");
SW.WriteLine("");
SW.WriteLine("");
SW.WriteLine();
SW.WriteLine("");
SW.WriteLine("");
SW.WriteLine("");
}
}
Этот сработал И ПРОТИВ его прошли, большое спасибо.
using (StreamWriter SW = File.CreateText("text/awardsList.txt"))
{
SW.WriteLine("");
SW.WriteLine("");
SW.WriteLine("");
SW.WriteLine();
}