Piszę aplikacji Silverlight dla Windows Phone 7, który ma klasę, która musi dokonać wielu żądań do WebClient.DownloadStringAsync()Jeżeli webclient przypadki ponownego wykorzystania w Silverlight
Am I lepiej tworząc nową instancję dla WebClient każde żądanie, czy też skuteczniejsze jest inicjowanie pojedynczej instancji w polu i używanie jej dla każdego żądania (upewniając się, że tylko jedno żądanie jest aktywne w tym samym czasie)?
public class MainViewModel : INotifyPropertyChanged
{
private readonly WebClient _wc;
public MainViewModel()
{
_wc = new WebClient
{
Credentials = new NetworkCredential("yyyyyyy", @"xxxxxx")
};
}
readonly Uri _baseUrl = new Uri(@"https://some.web.url");
public void GetServices()
{
_wc.DownloadStringCompleted += GetServicesCompleted;
var uri = new Uri(_baseUrl, "/path");
_wc.DownloadStringAsync(uri);
}
private void GetServicesCompleted(object sender, DownloadStringCompletedEventArgs e)
{
_wc.DownloadStringCompleted -= GetServicesCompleted;
string result = e.Result;
// other logic...
GetServiceResources();
}
private void GetServiceResources()
{
_wc.DownloadStringCompleted += GetServicesResourcesDownloaded;
var url = new Uri(_baseUrl, "/path2");
_wc.DownloadStringAsync(url);
}
// etc
}
Wiem, o czym mówisz, jeśli chodzi o zrzędliwy stan, w którym mogą się znaleźć pełnomocnicy WCF! Byłoby interesujące dowiedzieć się, czy jest podobny do WebLienta Silverlight. –
@BFree usunął swoją odpowiedź, ale tylko po to, aby powtórzyć, że nie ma metody Dispose() w klasie WebClienta Silverlight, więc używanie bloków nie ma tutaj znaczenia. –
Jako osobistą preferencję jednak dodałem je, jeśli jest to łatwe lub udokumentować pierwsze wystąpienie - to dobry nawyk, aby zawsze pozbywać się wszystkiego, co jest IDisposable; i nie jest to szkodliwe nawet dla WebClient. –