Подскажите, пожалуйста, в каком месте я допустил ошибку, что служба постепенно поджирает память
Задача службы при старте загружать построчно адреса из файла Services.txt в List
Program.cs
static class Program
{
static void Main()
{
ServiceBase[] ServicesToRun = {
new ServicePusher()
};
ServiceBase.Run(ServicesToRun);
}
}
ServicePusher.cs
public partial class ServicePusher : ServiceBase
{
private static readonly Logger Log = LogManager.GetCurrentClassLogger();
private Timer ServiceTimer;
private readonly List
public ServicePusher()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "/Services.txt"))
{
Log.Error("Не найден Services.txt");
throw new FileNotFoundException("Не найден Services.txt");
}
using (StreamReader sr = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "/Services.txt"))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Uri serviceUri = null;
try
{
serviceUri = new Uri(line);
}
catch (Exception ex)
{
Log.Error($"Ошибка при получении адреса сервиса ({line}): {ex}");
}
if (serviceUri != null)
{
ServiceUrl.Add(serviceUri);
}
else
{
Log.Error($"Некорректный адрес сервиса ({line}) в файле Services.txt");
}
}
}
ServiceTimer = new Timer
{
Interval = Config.Interval
};
ServiceTimer.Elapsed += Tick;
ServiceTimer.AutoReset = true;
ServiceTimer.Start();
Log.Info("Сервис успешно запущен");
Log.Info($"Загружено сервисов: {ServiceUrl.Count}");
}
protected override void OnStop()
{
ServiceTimer.Stop();
ServiceTimer.Dispose();
ServiceTimer = null;
Log.Info("Сервис остановлен");
}
private void Tick(object sender, ElapsedEventArgs e)
{
try
{
foreach (Uri url in ServiceUrl)
{
ServicePointManager.ServerCertificateValidationCallback = (o, a, b, c) => true;
WebRequest request = WebRequest.Create(url);
request.Proxy = null;
request.Method = "GET";
request.Timeout = 360000;
request.ContentType = "application/x-www-form-urlencoded";
try
{
using (WebResponse response = request.GetResponse())
{
using (Stream requestStream = response.GetResponseStream())
{
if (requestStream == null)
{
Log.Error($"Нет ответа от {url}");
}
}
}
}
catch (Exception ex)
{
Log.Error($"Ошибка ({ex.Message}) при запросе к сервису {url}");
}
}
}
catch (Exception ex)
{
Log.Error(ex.Message);
}
}
}
UPD: отжирает примерно по 2 мб в час
UPD 2: обновил код в вопросе, за 15 минут стабильно жрет ~350 кб...
Может дело в Program.cs?
Ответ
В общем мои опасения оказались напрасны, оставил службу работать всю ночь, сейчас работает и использует всего 5 мб памяти
Но остается непонятным почему при запуске службы первое время она потребляет около 11 мб
Комментариев нет:
Отправить комментарий