Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET 运行时设置

.NET 运行时设置

作者头像
leon公众号精选
发布于 2022-04-27 08:16:57
发布于 2022-04-27 08:16:57
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

.NET 运行时设置

.NET 5+(包括 .NET Core 版本)支持使用配置文件和环境变量在运行时配置 .NET 应用程序的行为。如果出现以下情况,则运行时配置是一个不错的选择:

  • 你不拥有或控制应用程序的源代码,因此无法以编程方式对其进行配置。
  • 应用程序的多个实例在单个系统上同时运行,并且你想要将每个实例配置为获得最佳性能。

备注

本文档正在编写中。如果你注意到此处提供的信息不完整或不准确,可以创建一个问题告知我们,或提交拉取请求以解决问题。要了解如何提交 dotnet/docs 存储库的拉取请求,请参阅参与者指南. ”

.NET 提供以下机制,它们用于配置运行时应用程序行为:

  • runtimeconfig.json 文件
  • MSBuild 属性
  • 环境变量

提示

如果使用环境变量配置运行时选项,会将设置应用于所有 .NET 应用。如果在 runtimeconfig.json 或项目文件中配置运行时选择,则仅将设置应用于此应用程序。 ”

某些配置值还可以通过调用 AppContext.SetSwitch 方法以编程方式进行设置。

文档此部分的文章按类别组织,例如调试和垃圾回收。如果适用,将显示 runtimeconfig.json 文件、MSBuild 属性、环境变量的配置选项;对于 .NET Framework 项目,还会显示 app.config 文件的配置选项以便交叉引用。

runtimeconfig.json

构建项目时,将在输出目录中生成 [appname].runtimeconfig.json 文件。如果项目文件所在的文件夹中存在 runtimeconfig.template.json 文件,它包含的任何配置选项都将插入到 [appname].runtimeconfig.json 文件中。如果自行构建应用,请将所有配置选项放在 runtimeconfig.template.json 文件中。如果只是运行应用,请将其直接插入 [appname].runtimeconfig.template.json 文件中。

备注

后续生成中将覆盖 [appname].runtimeconfig.template.json 文件。如果应用的 OutputType 不是 Exe,但你想将配置选项从 runtimeconfig.template.json 复制到 [应用名称].runtimeconfig.json,则必须在项目文件中将 GenerateRuntimeConfigurationFiles 显式设置为 true 。对于需要 runtimeconfig.json 文件的应用,此属性默认设置为 true。在 runtimeconfig.json 文件的 configProperties 部分指定运行时配置选项。如下: ”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"configProperties": {
  "config-property-name1": "config-value1",
  "config-property-name2": "config-value2"
}

示例 [appname].runtimeconfig.template.json 文件

如果要将这些选项放在输出 JSON 文件中,请将它们嵌套在 runtimeOptions 属性下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "3.1.0"
    },
    "configProperties": {
      "System.GC.Concurrent": false,
      "System.Threading.ThreadPool.MinThreads": 4,
      "System.Threading.ThreadPool.MaxThreads": 25
    }
  }
}

示例 runtimeconfig.template.json 文件

如果要将这些选项放在模板 JSON 文件中,请省略 runtimeOptions 属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "configProperties": {
    "System.GC.Concurrent": false,
    "System.Threading.ThreadPool.MinThreads": "4",
    "System.Threading.ThreadPool.MaxThreads": "25"
  }
}

MSBuild 属性

可使用 SDK 样式 .NET Core 项目的 .csproj 或 .vbproj 文件中的 MSBuild 属性设置某些运行时配置选项。MSBuild 属性优先于在 runtimeconfig.template.json 文件中设置的选项。

下面是一个示例 SDK 样式项目文件,其中包含用于配置运行时行为的 MSBuild 属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
    <ThreadPoolMinThreads>4</ThreadPoolMinThreads>
    <ThreadPoolMaxThreads>25</ThreadPoolMaxThreads>
  </PropertyGroup>

</Project>

用于配置运行时行为的 MSBuild 属性记录在每个区域各自的文章中,例如垃圾回收。它们还在 SDK 样式项目的 MSBuild 属性参考的运行时配置部分中列出。

环境变量

环境变量可用于提供一些运行时配置信息。如果使用环境变量配置运行时选项,会将设置应用于所有 .NET Core 应用。指定为环境变量的配置旋钮通常带有 DOTNET_ 前缀。

备注

.NET 6 为用于配置 .NET 运行时行为的环境变量标准化前缀 DOTNET_ 而不是 COMPlus_。但是,COMPlus_ 前缀仍将继续正常工作。如果使用的是早期版本的 .NET 运行时,则环境变量仍应该使用 COMPlus_ 前缀。 ”

可以使用 Windows 控制面板、命令行或通过在 Windows 和 Unix 系统上调用 Environment.SetEnvironmentVariable(String, String) 方法以编程方式定义环境变量。

下面的示例演示如何在命令行中设置环境变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Windows
set DOTNET_GCRetainVM=1

# Powershell
$env:DOTNET_GCRetainVM="1"

# Unix
export DOTNET_GCRetainVM=1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师高级俱乐部 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
全局负载均衡(GSLB)的实现方案
SLB(Server load balancing)是对集群内物理主机的负载均衡,而GSLB是对物理集群的负载均衡。 这里的负载均衡可能不只是简单的流量均匀分配,而是会根据策略的不同实现不同场景的应用交付。
全栈程序员站长
2022/08/11
2.9K0
全局负载均衡(GSLB)的实现方案
全局服务器负载均衡(GSLB)简介
大家好,又见面了,我是你们的朋友全栈君。引言 在过去的几年中,随着互联网的快速发展和企业应用WEB化,服务器负载均衡(SLB)技术已经不再陌生。 服务器负载均衡根据用户数据请求中的4-7层信息将其智能转发到后端少则数台多则成百上千台应用服务器, 并且确保根据事先定义的策略选择最佳的服务器进行转发,从而一定程度上解决了应用的可用性、扩展性等问题。 但是,随着用户对应用可用性和扩展性需求的进一步增加,越来越多的用户不满足于在单一数据中心提供服务,开始考虑容灾、用户就近访问等问题。 这正是负载均衡设备中的全局服务器负载均衡技术(GSLB)所要解决的问题。尽管GSLB技术早在数年前就是大部分负载均衡设备提供的必备功能, 但由于用户需求较小、功能不够完善、性能不足、价格高昂等因素,目前部署GSLB的用户在负载均衡整个用户群中所占比例还是很小。相信在未来几年中,GSLB的应用比例将快速增加。 本文针对GSLB相关技术及解决方案进行介绍。 GSLB技术 市场上存在的GSLB技术可以归纳为以下几类: 基于DNS的GSLB 绝大部分使用负载均衡技术的应用都通过域名来访问目的主机,在用户发出任何应用连接请求时,首先必须通过DNS请求获得服务器的IP地址,基于DNS的GSLB正是在返回DNS解析结果的过程中进行智能决策, 给用户返回一个最佳的服务IP。用户应用流程与没有GSLB时未发生任何变化。这也是市场上主流的GSLB技术。 基于应用重定向的GSLB 基于应用重定向的GSLB是在负载均衡设备收到用户应用请求并选择最佳服务IP后,通过应用层协议将用户请求重定向到所选择的最佳服务IP。这种方式只适用于支持应用重定向的协议(如HTTP、MMS),且性能较差。 基于IP地址伪装(三角传输)的GSLB 有个别负载均衡设备厂商采用这种技术来实现GSLB。当用户应用请求到达一台负载均衡设备时,这台负载均衡设备计算出对于该用户最佳的服务IP(定义在另一台同一厂商负载均衡设备上)并将用户请求转发给该IP。 第二台负载均衡设备直接将响应返回用户,但必须将源地址修改为第一台负载均衡设备的服务IP。这种方式要求所有站点必须为同一厂家的负载均衡设备,另外地址伪装的数据包会可能被互联网中的路由设备过滤掉。 因为所有用户请求都要经过广域网三角方式传输而不是发到最佳的负载均衡设备,用户访问效果和性能都比较差。 基于主机路由注入的GSLB(Anycast) 在多个站点定义相同的服务IP,并由负载均衡设备或路由器将该IP的主机路由发送出去,这样网络中会存在多条到达该主机地址的路由。由于路由设备总是选择最近(Metric最小)的路由转发数据, 用户的访问请求总是被转发到最近的负载均衡设备。这种方式要在不同站点广播相同的主机路由,由于运营商的限制问题很难实现。另外这种方式策略非常简单,只能根据最短路由选择,客户无法定义灵活的选择策略。 根据上面的分析,后面的三种方式都有很多局限性或性能较差,这也是为什么基于DNS的GSLB成为主流技术的原因。在基于DNS的GSLB具体实现中,不同厂家的功能会有所不同,也有部分用户自己开发智能DNS实现类似功能。 总体来说,一个完善的基于DNS的GSLB设备可以满足以下需求: 支持任何IP应用。 各服务站点可以使用不同厂家的本地服务器负载均衡设备或直接使用真实服务器。 GSLB控制设备可直接作为授权DNS,也可以配置为DNS代理方式。DNS代理方式在做GSLB决策控制同时可以对后端DNS服务器进行负载均衡。当业务量增加时可以通过增加后端的真实DNS服务器数量进行扩展。 内置国际IANA机构提供的全球各区域地址分配表,且用户自定义区域可以包含足够多的IP前缀。同时区域定义支持树状分层结构,如China.Beijing.HaiDian。这些功能在GSLB控制设备进行静态基于区域选择服务站点时是必须的。 支持返回A记录和CNAME等记录。尤其在多级GSLB控制时,返回CNAME是必须具备的。 支持丰富的GSLB策略,常见的如往返时间(RTT)、权重、活动服务器等。 具有灵活的自定义脚本用于过滤各种非法DNS请求或攻击。 强大的DDoS攻击防护功能。一旦GSLB控制设备被攻击瘫痪,所有业务都无法提供。 基于DNS的GSLB工作原理 下面我们对基于DNS的GSLB的工作原理进行简单介绍。
全栈程序员站长
2022/09/06
3.8K0
GSLB负载均衡策略
大家好,又见面了,我是你们的朋友全栈君。负载均衡策略 1.静态策略 1)基于特定的用户源IP地址:特定的IP地址段定向到特定的POP节点或者虚拟服务器
全栈程序员站长
2022/08/30
4990
超清晰的 DNS 原理入门指南
来源:阮一峰的网络日志 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2016/06/dns.html DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,
小小科
2018/05/04
1.7K0
超清晰的 DNS 原理入门指南
全局负载均衡、CDN内容分发的原理与实践
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
玄姐谈AGI
2021/07/29
1.9K1
GSLB调度服务原理
GSLB,全局负载均衡(Global Server Load Balancing ),主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)。是对物理集群的负载均衡,不止是简单的流量均匀分配,还会根据应用场景的不同来制定不同的策略。本文将讨论 GSLB 的几种实现,并介绍调度服务实现的大体情况。
全栈程序员站长
2022/06/30
2.4K0
GSLB调度服务原理
基于DNS解析的GSLB《CDN技术详解》
基于DNS解析的GSLB方案实际上就是把负载均衡设备部署在DNS系统中。在用户发出任何应用连接请求时,首先必须通过DNS系统来请求获得服务器的IP地址,基于DNS的GSLB正是在返回DNS解析结果的过程中进行智能决策,给用户返回一个最佳的服务器的IP地址。从用户的视角看,整个应用流程与没有GSLB参与时没有发生任何变化。
全栈程序员站长
2022/06/29
3.1K0
DNS基础知识
辅助域名服务器:和Master一起提供DNS服务,当Master服务器上的配置信息修改的时候,会同步更新到Slave服务器上。
保持热爱奔赴山海
2019/09/18
2.1K0
DNS基础知识
GSLB相关知识点
GSLB 是 Global Server Load Balance 的缩写,即全局负载均衡。本文首先介绍了什么是负载均衡 SLB ,以及为什么要使用 SLB 。接着引出全局负载均衡 GSLB 的概念和作用。为此介绍了其基于 DNS进行解析和分配负载的实现,包括 DNS 的原理简介、应用部署中的基本概念、分配负载的决策条件等内容。以外,本文还简单介绍了通过 HTTP 和 IP 实现 GSLB 的方式,并对三者的优缺点进行了简单对比。最后是本文的参考文献。
全栈程序员站长
2022/07/01
1.5K0
GSLB相关知识点
CDN之GSLB详解
CDN的关键技术主要有内容路由技术、内容分发技术、内容存储技术、内容管理技术等,而本文介绍的GSLB是属于CDN中的内容路由技术的关键技术。
灰子学技术
2021/01/20
4.4K0
CDN之GSLB详解
CDN之GSLB详解
CDN的关键技术主要有内容路由技术、内容分发技术、内容存储技术、内容管理技术等,而本文介绍的GSLB是属于CDN中的内容路由技术的关键技术。
全栈程序员站长
2022/06/28
1.9K0
CDN之GSLB详解
流量调度:DNS、全站加速及机房负载均衡
服务流量切换并没有想象中那么简单,因为我们会碰到一个很大的问题,那就是DNS缓存。DNS是我们发起请求的第一步,如果DNS缓慢或错误解析的话,会严重影响读多写多系统的交互效果。
wayn
2024/04/28
7060
流量调度:DNS、全站加速及机房负载均衡
DNS负载均衡
对于负载均衡的一个典型应用就是DNS负载均衡。庞大的网络地址和网络域名绝对是负载均衡体现优势的地方。那么它的具体原理是如何的呢?本文就将为大家详细介绍一下相关内容。
全栈程序员站长
2022/09/06
2.3K0
超清晰的 DNS 原理入门指南
DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。
马哥linux运维
2019/01/03
2.4K0
超清晰的 DNS 原理入门指南
最全面的 DNS 原理入门
DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。
哲洛不闹
2018/09/18
8720
最全面的 DNS 原理入门
全面理解DNS及HTTPDNS
移动场景下DNS解析开销是整个网络请求中不可忽略的一部分。在弱网环境下,基于UDP的LocalDNS解析非常容易出现解析超时的问题,并且即使解析成功会消耗数百毫秒乃至更甚,对我们整个业务请求而言是非常不利的,它直接影响了客户的体验。
架构之家
2022/07/12
2.9K0
全面理解DNS及HTTPDNS
万字长文给“DNS”带绿帽
我们先想想一个问题,我们打开一个微信或者一个XX音乐,一个网页,到底会开几个进程。
我是程序员小贱
2020/06/05
2.2K0
DNS、CDN加速和域名解析之间的关系
此处的本地DNS服务器,一般是ISP(Internet Service Provider)提供。ISP,即是互联网服务提供商。比如,我们熟知的电信,就是ISP。
我是leon
2022/05/11
10.1K0
DNS 原理入门
DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。 本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解DNS。 一、D
ruanyf
2018/04/12
1.5K0
DNS 原理入门
cdn技术原理
作者:IT世界,来自:www.it.com.cn 1. 前言   Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的影响,响应速度慢还是经常抱怨和困扰。解决方案就是在网络传输上利用缓存技术使得Web服务数据流能就近访问,是优化网络数据传输非常有效的技术,从而获得高速的体验和品质保证。   网络缓存技术,其目的就是减少网络中冗余数据的重复传输,使之最小化,将广域传输转
架构师小秘圈
2018/04/02
4.5K0
cdn技术原理
相关推荐
全局负载均衡(GSLB)的实现方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验