У меня есть Dispose Process.Start(url)?

Простой вопрос: я хочу открыть URL-адрес с помощью браузера по умолчанию, поэтому я просто делаю Process.Start(url). Однако я заметил, что это возвращает объект IDisposable.

Итак, теперь я задаюсь вопросом, нужно ли мне это распоряжаться? Или, если это так, если мое приложение каким-либо образом отвечает за этот процесс? Предполагаемая функциональность - это просто "Огонь и забыть", я не хочу, чтобы мое приложение было родителем нового процесса, и ему не нужно взаимодействовать с ним.

Я видел некоторые похожие, но несвязанные вопросы о SO, которые, похоже, говорят, что просто вызов Process.Start на URL-адресе прекрасен, но я не хочу сталкиваться с трудностями в отладке утечек памяти/проблемах с исчерпанием ресурсов, вызванных моими я поддерживаю ссылки на длительные процессы браузера.

Ответ 1

Не могли бы вы просто обернуть его в предложении using, чтобы гарантировать, что GC делает все, что ему нужно для этого, ЕСЛИ вы должны избавиться от него? Это все равно позволит "пожар и забыть", но не оставляет память/ресурсы в плохом состоянии.

Вероятно, слишком много, но в CodeProject есть действительно хорошая статья о интерфейсе IDisposable: http://www.codeproject.com/KB/dotnet/idisposable.aspx

Ответ 2

Нет, вы этого не делаете.

void Main()
{
    Process result = Process.Start("http://www.google.com");

    if (result == null)
    {
        Console.WriteLine("It returned null");
    }
}

Печать

It returned null

От Process.Start Method (String) в MSDN (.NET Framework 4):

Если начальный адрес исполняемого файла является URL-адресом, процесс не запускается и возвращается null.

(В общем случае оператор using - это правильный способ работы с объектами IDisposable. За исключением клиентов WCF.)

Ответ 3

Запуск процесса - это собственный вызов, который возвращает дескриптор собственного процесса, который хранится в экземпляре Возвращаемого процесса. В процессе есть методы, которые используют дескриптор, чтобы вы могли делать такие вещи, как дождаться завершения процесса или бездействия.

Устранение процесса освобождает этот дескриптор. Я согласен с Джоном, заключить его в предложение использования.

Ответ 4

Ответ на

@Fooberichu - это место, но я думаю, что также стоит отметить, что обычно нужно лишь явно выделить несколько вещей.

Объекты всегда эффективно расположены в какой-то момент:

  • Всякий раз, когда GC делает коллекцию, она (в конечном итоге) уничтожает объекты, на которые больше не ссылаются. Поэтому, если вы не вручную распоряжаетесь, объект все равно может быть удален в течение нескольких секунд после выхода из области действия.
  • Когда ваше приложение завершается, все ресурсы, которые он удерживает, освобождаются. (Несмотря на то, что объекты не могут быть удалены С#/. Net, ОС будет требовать почти все, что захватит ваш процесс. Если срок службы ресурса выходит за пределы вашего приложения, то ОС обычно несет ответственность за его очистку)

Точка ручного размещения (или использования "использования" ), следовательно, не должна гарантировать, что ресурсы будут выпущены, но чтобы освободить их как можно раньше.

В наши дни вы вряд ли исчерпали большинство типов ресурсов (например, память, дескрипторы файлов или кисти системы). Однако, если вы держитесь за ресурсы, когда вам это не нужно, ваша программа, вероятно, будет менее эффективной, вы можете использовать больше памяти, чем необходимо, или, возможно, вызвать задержки, временно заблокировав другие приложения от полезных вещей и т.д. В В общем, Disposing - это хороший этикет, аккуратность и отсечение ненужной неэффективности.

Есть несколько случаев, когда ресурсы должны быть освобождены (например, если вы не закрываете файл, вы не можете открывать/переименовывать/перемещать/удалять его из другого места в своей программе или другой Если вы продолжаете распределять текстуры на своей видеокарте, не отпуская их, у вас закончится VRAM, и компьютерный дисплей не удастся), но в целом вы столкнетесь с этими ситуациями редко, и если вы будете следовать лучшим практикам (явно удаляя объекты, когда они больше не нужны), вам обычно не нужно знать, когда происходят эти ситуации, потому что вы уже будете иметь дело с ними правильно.