2012-04-16 19 views
5

prostu ogólne pytanie, Zajmuję się tworzeniem aplikacji sieci Web ASP.NET MVC 3, który odczytuje z pliku konfiguracyjnego, używając Stream Reader wewnątrz pomocą instrukcji do automatycznego usuwania następująco:Zaniepokojony zakleszczenia z C# StreamReader

using (StreamReader sr = new StreamReader(filepath)) 
{ 

} 

Moim problemem jest to, że gdy wielu użytkowników uruchamiania aplikacji, nastąpi zakleszczenie gdy wiele wystąpień aplikacji czyta wartości z pliku konfiguracyjnego. Moje pytanie brzmi: czy zakleszczenia są problemem podczas pracy z klasą Stream Reader? Intuicyjnie nie sądzę, ponieważ zakładam, że Stream Reader otwiera plik w trybie tylko do odczytu i nie ma zewnętrznych procesów zapisujących do pliku konfiguracyjnego innych niż ręczne zmiany. Chciałem tylko mieć pewność, czy to będzie problem. Wszelkie docenienia jest doceniane.

Odpowiedz

8

Moim problemem jest to, że gdy wielu użytkowników są wyświetlane zastosowania, impas nastąpi gdy wiele wystąpień aplikacji są wartości odczytu z pliku konfiguracyjnego

Nie, nie martw się. Nie wystąpi zakleszczenie. Otwierasz plik do czytania. Więc możesz mieć współbieżnych czytelników. Ale jeśli napiszesz do tego pliku w innym miejscu kodu, otrzymasz wyjątek. Ale bez impasu. Jeśli chcesz poprawnie zsynchronizować czytniki i programy piszące z jakimś udostępnionym zasobem, takim jak plik, możesz użyć klasy ReaderWriterLockSlim. Jeśli nigdy nie piszemy do pliku (z tego samego procesu lub innego procesu), wszystko jest w porządku. Ale jeśli nigdy nie piszesz do pliku, aby uniknąć czytania i analizowania tego pliku za każdym razem, powinieneś go przeczytać tylko raz i umieścić go w pamięci w pewnej strukturze pamięci. Na przykład tak działa system konfiguracji aplikacji .NET. Odczytuje i parsuje app/web.config jeden raz podczas uruchamiania aplikacji, a następnie przechowuje ją w pamięci, aby uzyskać szybszy dostęp. Ale oczywiście wszystko będzie zależeć od twojego konkretnego scenariusza.

+1

Ponadto, jeśli naprawdę są zaniepokojeni wielu ludzi czytających ten plik konfiguracyjny, należy ją przeczytać raz wewnątrz bezpiecznego obszaru gwintu a następnie buforować go do wykorzystania w przyszłości. – Tejs

+0

@Tejs, bardzo dobry punkt. Zaktualizuję moją odpowiedź, aby wziąć to pod uwagę. –

Powiązane problemy