/// <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} не получена, процесс отменен");
        }
Example #4
0
 public static String MemorySizeString(this long size, MemoryScale ms)
 => $"{((double)size / (int)ms):N2} {Enum.GetName(typeof(MemoryScale), ms)}";