Выяснилось, что вы на правильном пути, но мне пришлось установить свойства UserAgent и Refer в HttPWebRequest. Я думаю, Facebook хочет убедиться, что вы не бот
public static T Get<T>(string uri)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.UserAgent = "Mozilla / 5.0(Windows; U; WindowsNT 5.1; en - US; rv1.8.1.6) Gecko / 20070725 Firefox / 2.0.0.6";
request.Referer = "http://www.google.com";
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string json = reader.ReadToEnd();
Object result = new JavaScriptSerializer().Deserialize<T>(json);
return (T)result;
}
}
}
Никакой объект не будет уничтожен в конце блока.
Object1 будет Расположен, другое понятие; ничего не произойдет с Object2.
Оба объекта будут собраны и могут быть завершены, когда-то позже. Сборка "мусора" недетерминирована - Вы не можете полагаться, когда она произойдет.
См. IDisposable на MSDN для больше.
Блок использования является действительно синтаксическим сахаром для конструкции как это:
try
{
Brush b = new SolidBrush(Color.Red);
}
finally
{
b.Dispose();
}
Так, 'b' будет расположен в конце блока попытки, если чего-то не произойдет, который является вне управления приложения.
В конце блока (bookmark1), в Вашем примере, только возражают 1, будет расположен. В случае потока файла это означает, что поток будет закрыт, и дескриптор будет выпущен, но фактический строковый объект все еще будет в памяти (готов быть убранным GC). В Вашем случае не будет расположен Object2, таким образом, дескриптор, который он использует, будет все еще сохранен открытым. В конечном счете GC соберет его и назовет его финализатор, в котором времени это будет выпущено правильно.
Если Вы захотите, чтобы оба объекта были "очищены" правильно, то они оба должны будут быть расположены, или через обертывание их в использовании операторов, или вызов Располагает вручную.
Существует альтернатива, потенциально более чистый синтаксис также:
using (Object1 obj1 = new Object1(), Object2 obj2 = new Object2())
{
// Do something with obj1 & obj2
}
Если Вы сделаете то это, obj1 И obj2 будет оба Расположено в конце блока. В Вашем случае это означает, что оба объекта будут закрыты, и их выпущенные дескрипторы. GC затем очистит их при некоторой будущей сборке "мусора".
Для получения дополнительной информации посмотрите страницу MSDN на использовании.
object2 не будет уничтожен (расположенный) с object1. Однако отдельный блок объема создается для оператора использования, таким образом, object2 действительно выходит из объема в этой точке. Это - распоряжение, просто не детерминировано.
Кроме того, если object2 является также IDisposable, можно сделать это:
using (object1)
using (object2)
{
} // bookmark1
Независимо от того, что, применяют нормальные правила сборки "мусора": управляемые ресурсы (память) для объекта все еще обрабатываются нормальным способом. Using/IDisposable только выпускает неуправляемые ресурсы.