2012-05-30 20 views
14

Tôi có nên tạo các trường hợp CloudStorageAccount và CloudBlobClient mỗi lần tôi muốn nhận blob từ bộ nhớ không? Ví dụ: tôi đã triển khai Nhà cung cấp đường dẫn ảo tùy chỉnh để làm việc với bộ nhớ blob. Giải pháp thiết kế tốt nhất: tạo CloudStorageAccount và CloudBlobClient một lần là trường riêng của Nhà cung cấp đường dẫn ảo tùy chỉnh của tôi hoặc sử dụng tiện ích với các phương thức tĩnh (được chia sẻ) tạo CloudStorageAccount và CloudBlobClient mỗi khi tôi muốn lấy blob từ lưu trữ? Làm thế nào đắt tiền từ điểm thực hiện?Việc tạo tiền của CloudStorageAccount hoặc CloudBlobClient tốn bao nhiêu từ điểm hiệu suất?

+1

vui lòng xem http://stackoverflow.com/a/9934393/468244 ... vì việc tạo không phải là "miễn phí" và sử dụng lại bình thường không phải là vấn đề mà bạn nên sử dụng lại. –

+0

Ok. Cảm ơn bạn. Nhưng các chủ đề này có an toàn trong ngữ cảnh của VirtualPathProvider không? Như tôi đã hiểu chỉ có một cá thể của VirtualPathProvider cho mỗi ứng dụng (nếu tôi tạo một cá thể mới và đăng ký nó trong global.asax trên application_start), vì vậy sẽ không có vấn đề gì với thread-safety? – eternity

+0

vì @sandrino cho biết sẽ không có vấn đề gì với chuỗi. Tùy thuộc vào ứng dụng của bạn, nó cũng có thể cần thiết để giữ 'CloudBlobContainer' sau 'CreateIfNotExist'ing chúng. Nhưng điều đó phụ thuộc vào trường hợp sử dụng. –

Trả lời

14

Bạn có thể sử dụng lại CloudStorageAccount và CloudBlobClient vì chúng không giữ trạng thái (xem câu trả lời của Steve Marx trong liên kết của Simon). SDK là mã nguồn mở và bạn có thể chỉ đơn giản là look at the source on GitHub.

Nếu bạn xem qua lớp CloudStorageAccount, bạn có thể thấy rằng mục đích chính của nó là đảm bảo bạn kết thúc với StorageCredentials bằng Blob/Queue và TableEndpoint. Nhìn vào hàm tạo của CloudBlobClient, bạn có thể thấy rằng nó lưu trữ các thông tin lưu trữ, URI điểm cuối và một số giá trị mặc định.

Không có gì phức tạp ở đây và không có bất kỳ mạng I/O nào có nghĩa là quá trình xử lý rất rẻ. Nhưng khi bạn nghĩ về hiệu suất, mọi tối ưu hóa nhỏ có thể giúp bạn lưu trữ an toàn trong một biến tĩnh (điều này có thể ảnh hưởng đến việc kiểm tra đơn vị của bạn) hoặc nếu bạn sử dụng một thùng chứa IoC, bạn có thể chọn sử dụng một cá thể duy nhất cho toàn bộ vùng chứa.

Bây giờ, bạn cần tính đến điều gì đó. Cả CloudStorageAccount và CloudBlobClient của bạn sẽ lưu các thông tin lưu trữ và URI điểm cuối. Nhưng nếu bạn thay đổi thông tin này thông qua cổng thông tin (bạn có thể thay đổi khóa của tài khoản lưu trữ của bạn)? Nếu bạn lưu trữ một cá thể đơn lẻ của CloudStorageAccount/CloudBlobClient, bạn có thể cần phải xử lý sự kiện RoleEnvironment.Changing để 'làm mới' các đối tượng này với thông tin tài khoản lưu trữ mới.

+0

Nếu đây là trường hợp thì tại sao tôi gặp lỗi, http://stackoverflow.com/questions/24229288/parallel-blob-upload-throwing-404-bad-request-intermittently – user960567

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