2008-12-23 30 views
35

Chúng tôi biết rằng IIS lưu trữ ConfigurationManager.AppSettings để nó đọc đĩa chỉ một lần cho đến khi web.config được thay đổi. Điều này được thực hiện cho mục đích hiệu suất.ConfigurationManager.AppSettings Caching

người tại địa chỉ:

http://forums.asp.net/p/1080926/1598469.aspx#1598469

tuyên bố rằng .NET Framework không làm tương tự cho App.config, nhưng nó đọc từ đĩa cho mọi yêu cầu. Nhưng tôi thấy khó tin, bởi vì nó sẽ chậm hơn. Xin vui lòng cho tôi biết rằng anh ta sai hoặc tôi sẽ phải sửa mọi Console/Windows Forms/Windows Services tôi đã viết.

Cập nhật Tôi rất tiếc khi tôi hiểu sai những gì mọi người đã nói trong diễn đàn được liên kết ở trên.

Trả lời

40

Kiểm tra nhanh dường như cho thấy rằng các cài đặt này chỉ được tải khi khởi động ứng dụng.

//edit the config file now. 
Console.ReadLine(); 

Console.WriteLine(ConfigurationManager.AppSettings["ApplicationName"].ToString()); 
Console.WriteLine("Press enter to redisplay"); 

//edit the config file again now. 
Console.ReadLine(); 
Console.WriteLine(ConfigurationManager.AppSettings["ApplicationName"].ToString()); 
Console.ReadLine(); 

Bạn sẽ thấy rằng tất cả các đầu ra vẫn giữ nguyên.

+15

Chỉ cần là cầu kỳ, các cài đặt được tải lần đầu tiên chúng được tham chiếu không nhất thiết phải khởi động ứng dụng. –

+7

Để có nhiều lựa chọn hơn (và tắt chủ đề khởi động) - không cần gọi ToString() - nó đã là một chuỗi –

+1

Bạn chỉ cần kiểm tra lớp System.Configuration.ConfigurationManager và bạn sẽ thấy rằng lớp và thuộc tính của nó là tĩnh – heymega

2

Nó không quan trọng nếu nó có hay không. Không khắc phục sự cố hiệu suất nếu không có sự cố.

+41

Tôi hơi không đồng ý ở đây. Các giá trị cấu hình như thế này có thể được sử dụng ở tất cả các loại địa điểm trong ứng dụng của bạn, bao gồm các vòng lồng nhau và như vậy. Grokking cho dù đọc của một tập tin cấu hình sẽ mất micro giây so với mili giây là quan trọng để biết. –

1

Vì John cho biết chỉ dành nhiều thời gian hơn cho việc này nếu bạn thực sự thấy một lần truy cập hiệu suất.

Ngoài ra tôi khá chắc chắn rằng các ứng dụng này giữ cấu hình trong bộ nhớ, và để xem bất kỳ thay đổi trong cấu hình ứng dụng sẽ cần phải khởi động lại .

Đối với một số further reading về các bí ẩn còn lại.

3

Nó đọc tệp cấu hình ứng dụng (MyApp.exe.config) khi khởi động ứng dụng, vì có thể dễ dàng được xác minh bằng cách thay đổi tệp trong khi ứng dụng đang chạy.

Các bình luận trong các bài diễn đàn tham chiếu bởi OP là:

Các giá trị cho Web.config là lưu trữ vào bộ nhớ cache/bộ nhớ khi ứng dụng bắt đầu do vậy tại sao khởi động lại ứng dụng khi bất kỳ thay đổi được tạo thành web.config. Lưu ý rằng điều này chỉ áp dụng cho web.config, bất kỳ file .config khác mà bạn có thể sử dụng được truy cập từ đĩa theo mặc định

tôi sẽ giải thích nhận xét này như ý nghĩa rằng cấu hình tập tin khác ngoài web .config trong một ứng dụng ASP.NET được truy cập từ đĩa theo mặc định. Và tương tự, cấu hình các tập tin khác với MyApp.exe.config trong một ứng dụng WinForms/Console được truy cập từ đĩa theo mặc định.

Nhận xét này không nói rằng MyApp.exe.config được đọc từ đĩa theo mặc định.

2

AppSettings được lưu trong bộ nhớ cache. Bạn có thể cải thiện hiệu suất bằng cách thêm bộ nhớ đệm để giới hạn tra cứu namevaluecollection.

Xem: DotNetPearls Static Config Pattern