Tôi có đoạn code sau (cắt giảm để có thể đọc):Will .Net Garbage Thu thập một đối tượng không được tham chiếu, nhưng có một chuỗi đang hoạt động?
Main Class:
public StartProcess()
{
Thinker th = new Thinker();
th.DoneThinking += new Thinker.ProcessingFinished(ThinkerFinished);
th.StartThinking();
}
void ThinkerFinished()
{
Console.WriteLine("Thinker finished");
}
Thinker Class:
public class Thinker
{
private System.Timers.Timer t;
public delegate void ProcessingFinished();
public event ProcessingFinished DoneThinking;
BackgroundWorker backgroundThread;
public Thinker() { }
public StartThinking()
{
t = new System.Timers.Timer(5000); // 5 second timer
t.AutoReset = false;
t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
t.Start();
// start a background thread to do the thinking
backgroundThread = new BackgroundWorker();
backgroundThread.DoWork += new DoWorkEventHandler(BgThread_DoWork);
backgroundThread.RunWorkerAsync();
}
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
DoneThinking();
}
BgThread_DoWork(object sender, DoWorkEventArgs e)
{
// work in here should go for much less than 5 seconds
// it will die if it doesn't
t.Stop();
DoneThinking();
}
}
Những gì tôi ban đầu được dự kiến sẽ xảy ra là người xử lý sự kiện trong lớp chính sẽ ngăn cản Nhà tư tưởng khỏi bị thu gom rác thải.
Apparently this isn't the case.
Tôi đang tự hỏi liệu việc thu gom rác có xảy ra bất kể chuỗi này có "bận" hay không. Nói cách khác, có một cơ hội nó sẽ được thu thập rác trước khi thời gian chờ 5 giây đã hết hạn?
Nói cách khác, người thu gom rác có thể thu thập Nhà tư tưởng của tôi trước khi xử lý xong không?
Khi sự kiện đã trôi qua trên Bộ hẹn giờ xảy ra, sự kiện xảy ra trên một chuỗi mới. Có lẽ đó là những gì anh ta đang nói về. http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx – Joe
Xin lỗi, tôi không rõ ràng - đoạn nhận xét thực sự quan trọng hơn tôi đã cho nó tín dụng. Tôi sẽ cố gắng cập nhật. – Damovisa
Ngoài ra, những gì Joe K nói - bản thân Timer tôi giả định sẽ chạy trên một chủ đề khác. Sự kiện đã trôi qua chắc chắn trở lại trên một chuỗi khác. – Damovisa