/// <inheritdoc cref="IMemoryService"/> public async Task <AppRamDataResult> GetRam(MemoryScale memScale, string processName) { //Задача есть if (_db.ContainsKey(processName)) { return(await GetProcessData(processName, memScale)); } return(await CreateAppWatch(processName, memScale)); }
/// <summary> /// Добавление задания для отслеживания /// </summary> /// <param name="processName">Название процесса, приложения</param> /// <param name="memScale">Еденица измерения памяти</param> /// <returns>Данные по заданию</returns> private async Task <AppRamDataResult> CreateAppWatch(string processName, MemoryScale memScale) { var app = await GetCurrentProcessMemory(processName); app.MemorySc = memScale; app.LastDataGave = DateTime.Now; while (!_internalToken.Token.IsCancellationRequested && !_db.TryAdd(processName, app)) { await Task.Delay(100).ConfigureAwait(false); } return(new AppRamDataResult() { ProcessName = app.ProcessName, ProcTime = app.ValueTime, Scale = memScale.GetDescription(), Value = app.ValueToStringResult() }); }
/// <summary> /// Получение информации о существующем приложении /// </summary> /// <param name="processName">Название приложения</param> /// <param name="memScale">Еденица измерения памяти</param> /// <returns></returns> private async Task <AppRamDataResult> GetProcessData(string processName, MemoryScale memScale) { while (!_internalToken.Token.IsCancellationRequested) { if (_db.TryGetValue(processName, out var app)) { app.MemorySc = memScale; app.LastDataGave = DateTime.Now; return(new AppRamDataResult() { ProcessName = app.ProcessName, ProcTime = app.ValueTime, Scale = memScale.GetDescription(), Value = app.ValueToStringResult() }); } await Task.Delay(100).ConfigureAwait(false); } throw new Exception($"Информация о приложении {processName} не получена, процесс отменен"); }
public static String MemorySizeString(this long size, MemoryScale ms) => $"{((double)size / (int)ms):N2} {Enum.GetName(typeof(MemoryScale), ms)}";