2010-05-03 40 views
5

Làm cách nào để giữ số lần đối tượng của một lớp cụ thể (loại?) Đang bị xử lý trong suốt thời gian đăng ký của tôi. Hãy tưởng tượng tôi có một lớp A, bây giờ, tôi muốn đếm bao nhiêu lần các đối tượng của A được thu thập bởi GC.Đếm số lần dọn dẹp GC trên một đối tượng

Tôi hy vọng tôi đang nói đúng về điều này vì tôi được hỏi điều này trong một cuộc phỏng vấn hôm nay và câu trả lời tôi đưa ra không thỏa mãn người phỏng vấn. Và đây là những gì tôi tưởng tượng anh ta đang cố hỏi.

Những gì tôi nói là người ta có thể giữ một lĩnh vực tĩnh gọi đếm trong lớp A và tăng nó trong Finalize() cuộc gọi của đối tượng đó.

Câu trả lời mà anh ta mong đợi là thứ được gọi là khối tĩnh. Tôi chưa bao giờ nghe nói về điều này trong .NET/C#. Ai đó có thể giải thích khối tĩnh này là gì?

+3

cách tôi ghét những câu hỏi này .... câu trả lời của bạn là chính xác vì nó sẽ hoạt động. người hỏi muốn không trả lời đúng nhưng muốn nghe những gì anh ta nghĩ về. điều này thật ngu ngốc, tôi nghĩ vậy. – Andrey

+1

Theo hiểu biết của tôi, không có những thứ như là một 'khối tĩnh' trong C# hoặc .NET. Câu trả lời của bạn về việc sử dụng biến tĩnh với trình hoàn thiện là thích hợp. Một profiler bộ nhớ cũng sẽ làm việc. – LBushkin

+0

Tôi sẽ cung cấp cho các memprofiler một thử. Cảm ơn câu trả lời của bạn guys. – tsps

Trả lời

0

Có thể anh ta đang đề cập đến một hàm tạo tĩnh cho lớp?

public class Foo { 

    public static Foo() { /* gets called once before first operator new */ } 

} 
+0

@plinth, đây là những gì tôi nghĩ. Nhưng ngay cả ở đó, làm thế nào điều này có thể giúp bạn theo dõi bao nhiêu lần lớp học được xử lý? – James

+0

Không. Đó là phần khó hiểu. – plinth

+0

Vâng, tôi nghĩ trường hợp của nó là 'đó là câu trả lời trong cuốn sách'. Không hoàn toàn chắc chắn cuốn sách họ đang đọc ... – James

0

Khối tĩnh thực sự là một tên khác cho số Static Constructor trong C#. Nó được gọi là tự động để intialize một lớp trước khi thể hiện đầu tiên được tạo ra. Tôi không thể thấy cách này sẽ giúp bạn theo dõi bao nhiêu lần một lớp được xử lý mặc dù. Cách duy nhất tôi có thể nghĩ đến là để lớp của bạn triển khai IDisposable, có một trường tĩnh được gọi là disposeCount và tăng nó trên mọi cuộc gọi đến Dispose hoặc để chắc chắn như bạn đã nói đúng trong phương thức Finalize. Câu trả lời của bạn chắc chắn không sai, và bạn nên chỉ ra cho họ nếu bạn nhận được một cuộc phỏng vấn thứ 2 :)

+0

Thật không may, đó là cuộc phỏng vấn cuối cùng. Tôi chỉ nói với anh ta tôi đã không nhận thức được một cái gì đó như thế trong NET. Tôi sẽ tự tin hơn với các kỹ năng .NET của mình vào lần tới. :) – tsps

Các vấn đề liên quan