2008-10-08 17 views
5

Başka bir exe çalıştırmak için System.Diagnostics.Process kullanan bir C# uygulamasına sahibim. İşlemin bir deneme bloğunda başlatıldığı ve son olarak bir blokta kapatıldığı bir örnek kodla karşılaştım. İşlemin kapalı olmadığı örnek kod da gördüm.C# konsol uygulamasında System.Diagnostics.Process uygulamasını kapatmazsam ne olur?

İşlem kapatılmadığında ne olur?

İşlemi oluşturan konsol uygulaması kapandığında, işlem tarafından kullanılan kaynaklar geri alınır mı?

Uzun süreler açık olan bir konsol uygulamasında herhangi bir işlemi açmamak ve bunların çoğunu kapatmak kötü mü?

Şerefe!

cevap

14

zaman çıkar diğer süreç, ait bütün kaynakları serbest kalmış oluyor, ama yine de Close() çağrı sürece (süreci hakkında bilgi bloğuna bir işaretçi olan) bir süreç sapına düzenleyecek Process referansınızda. Ben bir sorun olurdu, ancak da olabilir şüpheliyim. Genel bir kural olarak

using (Process p = Process.Start(...)) 
{ 
    ... 
} 

: Process Böylece sizin için otomatik olarak Dispose (ve dolayısıyla Close()) arayacak C# 'ın using(...) deyimini kullanabilirsiniz IDisposable uygulayan bir şey uygulaması halinde IDisposable, gerçekten gerektiği çağrı Dispose/Close veya üzerinde using(...) kullanın.

+4

Bir işlemin kapatılması işlemin çıkmasına neden olmadığına dikkat edin. –

1

Kendiniz başlatmış gibi çalışmaya devam ederler.

1

Bir işlem bağımsız bir varlıktır. Bir işlemin programlı olarak oluşturulması, bir işlemin masaüstünüzden başlatılmasıyla aynıdır.

Oluşturduğunuz bir işlemin tanıtıcısı yalnızca kolaylık sağlamak için döndürülür. Örneğin, giriş ve çıkış akışlarına erişmek veya (gördüğünüz gibi) onu öldürmek için. Üst işlem öldürülürken kaynaklar geri alınmaz.

Çok sayıda işlemi açmak için tek neden, CPU'yu ve RAM'in işleyemeyeceği kadar çok şey açmanızdır!

İlgili konular