2008-10-06 41 views
7

Tôi có một yêu cầu trong ứng dụng của mình mà tôi nghĩ có thể được đáp ứng bằng cách sử dụng bộ nhớ cục bộ luồng, nhưng tôi tự hỏi nếu đó là một trong những điều tốt nhất để tránh.Thực tiễn tốt nhất để sử dụng lưu trữ cục bộ luồng trong .NET là gì?

Tôi đã đọc một vài bài viết về đề tài này:

http://www.dotnetcoders.com/web/Articles/ShowArticle.aspx?article=58

http://msdn.microsoft.com/en-us/library/system.threadstaticattribute(vs.80).aspx

Tôi biết cách để sử dụng nó, tôi chỉ tự hỏi nếu tôi nên sử dụng nó.

Bất kỳ lời khuyên nào, bạn cần biết?

[Chỉnh sửa]

Đây là trường hợp sử dụng:

tôi tụ toàn bộ các truy cập dữ liệu thông qua một vài phương pháp mà làm rất nhiều cách đăng nhập về mỗi truy vấn. Một điều tôi đăng nhập là một bãi chứa hoàn chỉnh của văn bản lệnh với các lệnh được điền vào để tôi có thể chỉ cần sao chép-dán từ bản ghi nhật ký của mình trực tiếp vào Sql Management Studio.

Tăng tốc trong global.asax trong ứng dụng web của tôi Tôi gửi email cho quản trị viên với nhiều thông tin nhất có thể khi tôi nhận được ngoại lệ không được giải quyết. Tôi muốn đưa rằng lệnh sql dump văn bản vào email này khi tôi nhận được một SqlException, mà sẽ tiết kiệm cho tôi thời gian đào thông qua các bản ghi dấu vết khi một trang thổi lên vì một truy vấn.

Tôi không muốn thay đổi chữ ký phương thức của các lớp truy cập dữ liệu của mình để tôi có thể chuyển một số tham chiếu xuống toàn bộ ngăn xếp, chỉ để có được nó khi tôi có ngoại lệ. Tôi đã suy nghĩ có lẽ TLS sẽ là một nơi tốt để đặt một cái gì đó như "lastsqlcommand", nhưng đó không phải là một giải pháp khả thi.

+0

Tôi luôn tránh lưu trữ cục bộ và tìm cách khác để thực hiện tương tự. Suy nghĩ của tôi luôn là lưu trữ cục bộ có thể chậm hơn so với truy cập trực tiếp (không chắc liệu điều này có đúng hay không). Tôi cũng tò mò muốn người khác nghĩ gì. – dongola7

Trả lời

7

Một ứng dụng cho ứng dụng asp.net: việc xử lý một yêu cầu có thể chuyển đổi chủ đề, cụ thể là nếu có yêu cầu song song trong cùng một phiên. Bởi vì điều này, bất cứ điều gì bạn đặt trong TLS trước khi sự kiện HttpApplication.PostRequireRequestState có thể không có sau này, bởi vì bạn đang ở trên một chủ đề khác nhau.

[Chỉnh sửa bởi Người hỏi]

Đối với trường hợp sử dụng cụ thể của tôi, tôi đã kết thúc thêm một cặp khóa-giá trị vào từ điển SqlException.Data, mà tôi thì lấy khi tôi đăng nhập các chi tiết ngoại lệ. Điều này mang lại cho tôi chức năng tôi đã hy vọng sử dụng lưu trữ cục bộ luồng cho.

+0

Đây chính xác là những gì tôi đang tìm kiếm. Tôi nghi ngờ nó có thể không đáng tin cậy trong kịch bản này. Cám ơn. –

+0

Đây là một câu trả lời cũ, nhưng để làm rõ một chút: ASP.NET chỉ chuyển chủ đề trong các tình huống rất cụ thể. Lớn nhất là sử dụng các phương thức IO không đồng bộ - xem ví dụ: Lhotka và Guthrie thảo luận: http://www.lhotka.net/WeBlog/PermaLink,guid,019e3c37-38ed-492e-b769-16e1a57fed0a.aspx – EBarr

6

Lưu trữ cục bộ chủ đề là một cách nhanh chóng để sửa một thư viện được thiết kế trước các chủ đề và sử dụng nhiều biến và thống kê chung. Đó là cách mà thư viện chuẩn C được tạo thành an toàn thread trong khi không thay đổi giao diện của nó (trong nội bộ, nhiều hàm sử dụng các bộ đệm tĩnh).

Nói chung, đó là loại tốt cho mục đích đó. Nếu bạn phải có dữ liệu toàn cầu trong một môi trường đa luồng, thì lưu trữ cục bộ luồng là một cách tốt để đi. Một lý do phổ biến là bạn đang gọi một hàm của bên thứ ba gọi lại cho bạn trong cùng một khung nhưng không cung cấp cho bạn một móc để truyền thông tin bổ sung - điều này xảy ra rất nhiều khi bạn cố gắng bọc các thư viện C cũ hơn .MẠNG LƯỚI.

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