#c# #oop
#c# #ооп
Вопрос:
Я создаю Filewatcher
в цикле ниже. Я хотел бы знать, есть ли какие-либо проблемы с производительностью или ссылками, поскольку моя ссылочная переменная одинакова в цикле?
foreach (var dir in dirsToWatch)
{
**var watcher = new FileSystemWatcher(dir);**
watcher.Filter = filter;
watcher.Changed = new FileSystemEventHandler(onChange);
watcher.Created = new FileSystemEventHandler(onChange);
}
Комментарии:
1. Нет? Основываясь на том, что у вас есть, вы вынуждены делать это так, как вы это делаете. Вы не можете создать
watcher
переменную без ссылки наdir
. Каждая итерация цикла создаст свою собственнуюwatcher
переменную, но вы не можете использоватьwatcher
ее вне цикла. Вы думаете об удалении объекта?2. спасибо, да, я тоже думаю об утилизации.
Ответ №1:
Не совсем ясно, какова конечная цель вашего кода, но если вы хотите использовать watcher
объекты после завершения цикла, вам нужно сохранить их экземпляры в коллекции вне цикла. В противном случае у вас не будет ссылки на них, и они будут просто собраны в мусор.
Например:
var watchers = new List<FileSystemWatcher>();
foreach (var dir in dirsToWatch)
{
var watcher = new FileSystemWatcher(dir) {Filter = filter};
watcher.Changed = new FileSystemEventHandler(onChange);
watcher.Created = new FileSystemEventHandler(onChange);
watchers.Add(watcher);
}
// Do something with watchers here
// Dispose of watchers when done
watchers.ForEach(watcher => watcher.Dispose());