2012-06-20 23 views
6

Tôi đã tự hỏi điều này vào một ngày khác. Tôi không chắc chắn cách ASPX quản lý việc xử lý rác thải, nhưng theo như tôi có thể nói "tải xong" không loại bỏ các giá trị bộ nhớ tĩnh hoặc sau khi trang đã được tải lại. Tĩnh ít nhất về mặt C có nghĩa là phân bổ bộ nhớ theo chương trình của bạn cho đến khi chương trình tự tắt. Đây có phải là cách tương tự trong ASPX không? Nếu tôi có một giá trị tĩnh và tôi đi từ Trang A đến Trang B, giá trị tĩnh đó vẫn tồn tại trong RAM cho đến khi chúng rời khỏi ứng dụng hay là giá trị đó đã bị xóa khi tôi không còn trên Trang A nữa? (đi đến một trang web khác nhau loại bỏ dụ của họ ra khỏi hồ bơi ứng dụng trong máy chủ).Các đối tượng tĩnh trong ASP.NET là một sự lãng phí bộ nhớ?

Từ những gì tôi đã trải qua:

public static class foo 
    { 
     public static int x; 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     foo.x++; //This will continue to increment from the last value before reload 
    } 
+0

http://stackoverflow.com/questions/1714064 –

+0

http://stackoverflow.com/questions/1563171 –

+0

http://stackoverflow.com/questions/3814608 –

Trả lời

5

lớp tĩnh nên tránh trong ASP.NET. Chúng nằm trong bộ nhớ cho đến khi ứng dụng được khởi động lại và phải chịu nhiều lỗi đồng thời và điều kiện chủng tộc.

Và đóng phiên người dùng (phiên trình duyệt) không khởi động lại ứng dụng! Họ ở trong bộ nhớ ngay cả khi người dùng rời đi và quay lại. Vì vậy, thực sự thực sự tránh các lớp tĩnh!

+0

Bạn có bài viết hoặc tham chiếu thuộc loại nào đó chạm nhiều hơn về chủ đề này? Tôi sẽ rất thú vị khi tìm hiểu thêm về nó. –

+0

Xem các liên kết mà bạn có thể tìm thấy trong các nhận xét về câu hỏi của bạn. Bạn cũng có thể xem tại đây http://bytes.com/topic/c-sharp/answers/878381-static-variable-hell-asp-net và tại đây http://www.foliotek.com/devblog/avoid-static- biến-trong-asp-net/StackOverFlow cũng có rất nhiều bài viết. –

+2

Lưu ý rằng SOMETIMES bạn có thể cần phải sử dụng một biến tĩnh nếu bạn thực sự cần chia sẻ thông tin giữa toàn bộ ứng dụng của mình. Nhưng tôi thà sử dụng Singleton trong trường hợp này. –

0

này được mô hình thực hiện CLR tiêu chuẩn của bạn, nó cũng không khác biệt cho asp.net. Đối tượng tĩnh được coi là gốc của ứng dụng và không được thu thập rác.

Đây là một bài báo cũ về cách thu gom rác thải làm việc tại .net, nhưng tôi nghĩ rằng tất cả các nguyên tắc vẫn giống nhau: http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

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