从 .NET 9 开始, Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitor 接口和相关 API 已过时。 这些 API 将在将来的版本中删除。 资源监视功能已替换为使用可观测仪器的基于指标的更高效的方法。
以下 API 标记为已过时。 使用这些 API 会在编译时生成警告 EXTOBS0001 。
- IResourceMonitor
- ResourceMonitoringOptions.CollectionWindow
- ResourceMonitoringOptions.SamplingInterval
- ResourceMonitoringBuilderExtensions
- ResourceUtilization
- IResourceMonitorBuilder
- IResourceUtilizationPublisher
- ISnapshotProvider
- Snapshot
- SystemResources
- ResourceMonitoringServiceCollectionExtensions.AddResourceMonitoring(IServiceCollection, Action<IResourceMonitorBuilder>)
解决方法
改用具有可观测仪器的资源监视指标,而不是使用 IResourceMonitor。 基于指标的方法提供相同的资源利用率信息(CPU、内存),但与 OpenTelemetry 等现代可观测性系统集成得更好。
迁移示例
使用IResourceMonitor的旧方法:
services.AddResourceMonitoring();
// Inject and use IResourceMonitor
public class MyService
{
private readonly IResourceMonitor _resourceMonitor;
public MyService(IResourceMonitor resourceMonitor)
{
_resourceMonitor = resourceMonitor;
}
public void CheckResources()
{
var utilization = _resourceMonitor.GetUtilization(TimeSpan.FromSeconds(1));
Console.WriteLine($"CPU: {utilization.CpuUsedPercentage}%");
Console.WriteLine($"Memory: {utilization.MemoryUsedPercentage}%");
}
}
使用指标的新方法:
services.AddResourceMonitoring();
// Configure metrics collection.
services.AddOpenTelemetry()
.WithMetrics(builder =>
{
builder.AddMeter("Microsoft.Extensions.Diagnostics.ResourceMonitoring");
builder.AddConsoleExporter();
});
资源监视指标会自动发布,可由任何与 OpenTelemetry 兼容的指标管道使用。 有关详细信息,请参阅 Microsoft.Extensions.Diagnostics.ResourceMonitoring 指标。
禁止显示警告
如果必须使用过时的 API,可以在代码或项目文件中禁止显示警告。
若要仅取消单个冲突,请将预处理器指令添加到源文件以禁用,然后重新启用警告。
// Disable the warning.
#pragma warning disable EXTOBS0001
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore EXTOBS0001
若要取消项目中的所有 EXTOBS0001 警告,请将属性 <NoWarn> 添加到项目文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);EXTOBS0001</NoWarn>
</PropertyGroup>
</Project>
有关详细信息,请参阅 禁止显示警告。