У меня есть код, который в основном открывает файл веб-страницы + .ts по ссылке и повторяет его, но проблема в том, что он каждый раз увеличивает использование памяти и никогда не удаляет старые данные. Через 2 часа он использует более 2 ГБ. Любые идеи о том, как я могу решить эту проблему?
Я использую библиотеку Leaf.Xnet для запросов, и вот как я создаю свои потоки:
new Thread(new ThreadStart(WebHelper.Check)).Start();
Основной код:
public static void Check()
{
HttpRequest request = null;
while (Form1.isRuning)
{
Application.DoEvents();
try
{
request = new HttpRequest();
if (!ProxyManager.updating)
{
switch (ProxyManager.curProxyType)
{
case ProxyManager.proxyType.http:
request.Proxy = HttpProxyClient.Parse(ProxyManager.NextProxy(ProxyManager.proxyType.http));
break;
case ProxyManager.proxyType.socks4:
request.Proxy = Socks4ProxyClient.Parse(ProxyManager.NextProxy(ProxyManager.proxyType.socks4));
break;
case ProxyManager.proxyType.socks5:
request.Proxy = Socks5ProxyClient.Parse(ProxyManager.NextProxy(ProxyManager.proxyType.socks5));
break;
}
}
else
{
Thread.Sleep(2000);
Check();
}
request.UserAgentRandomize();
request.AddHeader(HttpHeader.Referer, "https://somesite.com");
request.KeepAlive = true;
request.ConnectTimeout = Form1.timeOut;
request.Reconnect = true;
string html = request.Get(Form1.link, null).ToString();
string auth = html.Substring(",[{\"src\":\"", "\"");
string sign = html.Substring("144p.apt?wmsAuthSign=", "\"");
if (auth != null && sign != null)
{
string auth2 = "";
foreach (char item in auth)
{
if (item != '\\')
auth2 += item;
}
auth = auth2;
string cdn = auth.Substring("https://", ".");
string id = auth.Substring("video/", "-");
if (cdn != null && id != null)
{
Random rnd = new Random();
request.Get(auth);
Form1.sended++;
WriteStat();
}
html = null;
auth = null;
auth2 = null;
sign = null;
}
}
catch (HttpException)
{
Check();
}
catch (ProxyException)
{
Check();
}
}
}
using
перед объявлением переменной. УдалитеHttpRequest request = null;
и поместите вместо негоusing var request = new HttpRequest();
там, где вы сейчас создаете новый HttpRequest. Нанесениеusing
на что-либо автоматически позаботится об одноразовом шаблоне. Обратите внимание, что вы можете вручную удалить все, что является одноразовым (= не собирает мусор автоматически), просто вызвав.Dispose()
для объекта. 13.08.2020