【发布时间】:2017-07-21 09:37:27
【问题描述】:
我正在使用 Docker Desktop for Windows 在 Windows Docker 容器中运行 .net 应用程序。当我的应用尝试使用此代码创建性能计数器时:
_counter = new PerformanceCounter(categoryName, counterName, InstanceName, true);
//My categoryname is Processor , CounterName is % Processor Time & instancename is _Total.
我遇到了这个异常:
未处理的异常:System.InvalidOperationException:类别确实 不存在。在 System.Diagnostics.PerformanceCounterLib.CounterExists(字符串机, 字符串类别,字符串计数器)在 System.Diagnostics.PerformanceCounter.InitializeImpl() 在 System.Diagnostics.PerformanceCounter..ctor(字符串类别名称, String counterName, String instanceName, Boolean readOnly)
这是我的容器的基础镜像:https://hub.docker.com/r/microsoft/dotnet-framework/
它包含 Windows Server 核心。
感谢任何帮助解决此问题。我不确定这是否只是我需要在此处更改的一些 Windows 设置,还是因为 docker & windows 或我的代码无法访问性能计数器的类别。
当我在本地机器而不是容器中运行它时,它工作得非常好。
【问题讨论】:
-
我发现了几件事: 1. 这实际上意味着处理器类别由于某种原因在我的操作系统中不存在。当我尝试通过此代码列出所有性能类别时: PerformanceCounterCategory[] categories = PerformanceCounterCategory.GetCategories(); foreach (PerformanceCounterCategory category in categories) { Console.WriteLine("Category name: {0}", category.CategoryName);没有一个叫做处理器的类别。为什么 Windows Server 2016 中缺少它?
标签: performancecounter docker-for-windows docker-desktop docker