【C#生态园】一文详解:NHibernate、Entity Framework Core、Dapper 等 .NET ORM 框架优劣对比

news2024/9/24 11:18:19

选择最佳工具:全面比较 .NET ORM 框架的优劣

前言

在 .NET 开发中,ORM(对象关系映射)框架扮演着至关重要的角色,它们为开发人员提供了便捷的数据库操作方式,使得面向对象的编程与关系型数据库之间的映射更加简单和高效。本文将对几种常用的 .NET ORM 框架进行介绍和比较,帮助读者在实际项目中选择最适合的解决方案。

欢迎订阅专栏:C#生态园

文章目录

  • 选择最佳工具:全面比较 .NET ORM 框架的优劣
    • 前言
    • 1. NHibernate:一个用于 .NET 的对象关系映射解决方案
      • 1.1 简介
        • 1.1.1 核心功能
        • 1.1.2 使用场景
      • 1.2 安装与配置
        • 1.2.1 安装指南
        • 1.2.2 基本配置
      • 1.3 API 概览
        • 1.3.1 实体映射
        • 1.3.2 查询语言
    • 2. Entity Framework Core:一个轻量级的、可扩展的 .NET ORM
      • 2.1 简介
        • 2.1.1 核心功能
        • 2.1.2 使用场景
      • 2.2 安装与配置
        • 2.2.1 安装方法
        • 2.2.2 基本设置
      • 2.3 API 概览
        • 2.3.1 数据上下文
        • 2.3.2 实体关系
    • 3. Dapper:一款高性能的微型ORM
      • 3.1 简介
        • 3.1.1 核心功能
        • 3.1.2 使用场景
      • 3.2 安装与配置
        • 3.2.1 安装指南
        • 3.2.2 基本配置
      • 3.3 API 概览
        • 3.3.1 SQL查询
        • 3.3.2 参数化查询
    • 4. FluentNHibernate:NHibernate的对象映射增强库
      • 4.1 简介
        • 4.1.1 核心功能
        • 4.1.2 使用场景
      • 4.2 安装与配置
        • 4.2.1 安装指南
        • 4.2.2 基本设置
      • 4.3 API 概览
        • 4.3.1 映射配置
        • 4.3.2 自动映射
    • 5. LLBLGen Pro:一个商业级ORM框架
      • 5.1 简介
        • 5.1.1 核心功能
        • 5.1.2 使用场景
      • 5.2 安装与配置
        • 5.2.1 安装指导
        • 5.2.2 基本配置
      • 5.3 API 概览
        • 5.3.1 实体模型设计
        • 5.3.2 查询构建
    • 6. PetaPoco:一个轻量级的微ORM库
      • 6.1 简介
        • 6.1.1 核心功能
        • 6.1.2 使用场景
      • 6.2 安装与配置
        • 6.2.1 安装指南
        • 6.2.2 基本设置
      • 6.3 API 概览
        • 6.3.1 CRUD操作
        • 6.3.2 批量操作
    • 总结

1. NHibernate:一个用于 .NET 的对象关系映射解决方案

1.1 简介

NHibernate 是一个成熟的开源对象关系映射 (ORM) 解决方案,它为 .NET 应用程序提供了强大的数据库访问功能。通过 NHibernate,开发者可以将面向对象的编程语言与关系型数据库进行无缝集成,简化了数据持久化的过程。

1.1.1 核心功能
  • 对象到关系数据库的映射
  • 自定义查询语言(HQL)
  • 缓存
  • 事务管理
  • 透明的延迟加载

NHibernate 官网链接:NHibernate

1.1.2 使用场景

NHibernate 通常用于开发需要与数据库交互的 .NET 应用程序,特别是那些使用面向对象编程语言的项目。

1.2 安装与配置

在使用 NHibernate 前,需要先安装并进行基本的配置。

1.2.1 安装指南

使用 NuGet 包管理器可轻松安装 NHibernate:

Install-Package NHibernate
1.2.2 基本配置
// NHibernate 配置
var configuration = new Configuration();
configuration.Configure(); // 从默认位置加载配置文件

ISessionFactory sessionFactory = configuration.BuildSessionFactory();

1.3 API 概览

NHibernate 提供了丰富的 API 来进行实体映射和数据库操作。

1.3.1 实体映射
// 实体映射示例
public class Product
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual decimal Price { get; set; }
}

// 映射配置文件
<class name="Product" table="Products">
  <id name="Id" column="ProductId" type="int">
    <generator class="identity"/>
  </id>
  <property name="Name" column="ProductName" type="string" not-null="true"/>
  <property name="Price" column="ProductPrice" type="decimal" not-null="true"/>
</class>
1.3.2 查询语言

NHibernate 支持 HQL(Hibernate Query Language)来进行高级查询。

// 使用 HQL 示例
var query = session.CreateQuery("FROM Product p WHERE p.Price > :price");
query.SetParameter("price", 100.00);
var results = query.List<Product>();

以上是 NHibernate 的简要介绍、安装配置以及 API 演示。详细内容请参考 NHibernate 文档。

2. Entity Framework Core:一个轻量级的、可扩展的 .NET ORM

2.1 简介

Entity Framework Core 是 Microsoft 推出的一款开源的对象关系映射(ORM)框架,它是 Entity Framework 的轻量级版本,专为 .NET Core 开发。它支持多种数据库,并提供了强大的查询语言和数据变更跟踪功能。

2.1.1 核心功能

Entity Framework Core 提供了数据模型到数据库表的映射,LINQ 查询,以及对数据库的修改和更新等功能。它还支持数据库迁移,允许开发人员轻松地管理数据库结构变更。

2.1.2 使用场景

Entity Framework Core 适用于需要与数据库交互的 .NET Core 应用程序,包括 Web 应用、桌面应用和移动应用等。

2.2 安装与配置

2.2.1 安装方法

你可以通过 NuGet 包管理器或者 .NET CLI 来安装 Entity Framework Core。在 Package Manager Console 中执行以下命令安装 Entity Framework Core:

Install-Package Microsoft.EntityFrameworkCore
2.2.2 基本设置

在使用 Entity Framework Core 之前,你需要定义一个继承自 DbContext 类的数据上下文,并指定要映射的实体类型。此外,你还需要在应用程序的配置中指定数据库提供程序和连接字符串等信息。

2.3 API 概览

2.3.1 数据上下文

数据上下文是 Entity Framework Core 中的核心组件,它代表了一个数据库会话,负责管理实体对象与数据库之间的映射和交互。以下是一个简单的数据上下文类的示例代码:

public class MyDbContext : DbContext
{
    public DbSet<Student> Students { get; set; }
    public DbSet<Course> Courses { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("your_connection_string");
    }
}

在这个示例中,MyDbContext 继承自 DbContext,并包含了两个属性 StudentsCourses,分别表示了学生和课程实体。

2.3.2 实体关系

Entity Framework Core 允许通过 Fluent API 或者数据注解来定义实体之间的关系。下面是一个使用 Fluent API 来定义实体关系的示例:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Course> Courses { get; set; }
}

public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Student> Students { get; set; }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Student>()
        .HasMany(s => s.Courses)
        .WithMany(c => c.Students)
        .UsingEntity(j => j.ToTable("StudentCourse"));
}

在这个示例中,StudentCourse 之间是多对多的关系,使用 HasMany()WithMany() 方法来定义实体之间的关系。

以上是 Entity Framework Core 的简单介绍和基本使用示例。你可以在 Entity Framework Core 官方文档 中找到更多详细的信息和示例。

3. Dapper:一款高性能的微型ORM

3.1 简介

Dapper 是一个轻量级、快速的对象关系映射(ORM)工具,它是由 Stack Overflow 团队开发并维护的。相比 Entity Framework 等 ORM 工具,Dapper 更加轻巧且性能出众。

3.1.1 核心功能

Dapper 提供了快速的数据访问操作,并且通过对象关系映射的方式将数据库中的数据映射成对象,也可以将对象转换为 SQL 语句执行在数据库中。

3.1.2 使用场景

Dapper 适用于需要高性能数据访问的场景,例如对于大量数据进行快速查询和操作,以及对于需要精细化控制 SQL 的场景。

3.2 安装与配置

3.2.1 安装指南

你可以通过 NuGet 来安装 Dapper,打开 Visual Studio 的 NuGet 包管理器控制台,输入以下命令进行安装:

Install-Package Dapper
3.2.2 基本配置

使用 Dapper 非常简单,只需引入 Dapper 命名空间即可开始使用其提供的功能。

using Dapper;

3.3 API 概览

3.3.1 SQL查询

Dapper 提供了一种直接执行 SQL 查询的方法,下面是一个简单的示例:

var sql = "SELECT * FROM Users WHERE Id = @Id";
var user = connection.QueryFirstOrDefault<User>(sql, new { Id = 1 });

在这个示例中,我们使用 QueryFirstOrDefault 方法执行 SQL 查询,并通过匿名对象传递参数 Id

3.3.2 参数化查询

Dapper 也支持参数化查询,这样可以防止 SQL 注入攻击。下面是一个参数化查询的示例:

var sql = "SELECT * FROM Orders WHERE OrderDate > @OrderDate";
var orders = connection.Query<Order>(sql, new { OrderDate = new DateTime(2021, 1, 1) });

在这个示例中,我们使用 Query 方法执行参数化查询,传递了一个包含参数 OrderDate 的匿名对象。

更多关于 Dapper 的使用,你可以参考官方文档:Dapper 官网

以上是关于 Dapper 的简要介绍,希望对你有所帮助!

4. FluentNHibernate:NHibernate的对象映射增强库

4.1 简介

FluentNHibernate 是 NHibernate 的对象关系映射(ORM)库的一个增强版本,它通过流畅的接口提供了更简洁、更易于维护的方式来进行对象映射。

4.1.1 核心功能

FluentNHibernate 提供了一种用流畅的语法来配置 NHibernate 映射信息的方法,使得代码更加清晰易懂。它还支持自动映射,可以根据约定快速地实现对象到数据库表的映射。

4.1.2 使用场景

FluentNHibernate 适用于需要使用 NHibernate 进行数据持久化的项目,并且希望通过简洁的代码来配置和管理映射信息的开发者。

4.2 安装与配置

4.2.1 安装指南

FluentNHibernate 可以通过 NuGet 包管理器进行安装,可以在 Visual Studio 中的 NuGet 包管理器控制台中执行以下命令进行安装:

Install-Package FluentNHibernate
4.2.2 基本设置

要开始使用 FluentNHibernate,首先需要创建一个定义映射信息的类,并通过 FluentNHibernate 的 API 来配置映射信息。

4.3 API 概览

4.3.1 映射配置

下面是一个基本的 FluentNHibernate 映射配置的示例:

using FluentNHibernate.Mapping;

public class ProductMap : ClassMap<Product>
{
    public ProductMap()
    {
        Table("Products");
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Price);
    }
}

以上代码定义了一个名为 Product 的实体类的映射,指定了其对应的数据表名为 Products,并且配置了 IdNamePrice 等属性的映射关系。

FluentNHibernate 官方文档

4.3.2 自动映射

FluentNHibernate 还提供了自动映射的功能,可以根据约定快速地建立对象到数据库表的映射,以下是一个简单的自动映射示例:

var sessionFactory = Fluently.Configure()
    .Database(SQLiteConfiguration.Standard.InMemory)
    .Mappings(m =>
        m.AutoMappings.Add(
            AutoMap.AssemblyOf<Product>()
                .Where(type => type.Namespace == "MyNamespace")))
    .BuildSessionFactory();

上述代码使用了 SQLite 作为数据库,并且配置了自动映射,指定了需要映射的实体类所在的命名空间为 MyNamespace

FluentNHibernate 自动映射官方文档

5. LLBLGen Pro:一个商业级ORM框架

LLBLGen Pro 是一个商业级 ORM(对象关系映射)框架,它提供了强大的数据访问功能和高效的实体模型设计工具。在本节中,我们将介绍LLBLGen Pro的安装与配置方法,以及其核心功能和使用场景。

5.1 简介

5.1.1 核心功能

LLBLGen Pro 提供了以下核心功能:

  • 高性能的数据访问
  • 灵活的实体模型设计工具
  • 强大的查询构建和自定义查询功能
  • 对多种数据库平台的全面支持
  • 可扩展的架构和定制化能力
5.1.2 使用场景

LLBLGen Pro 适用于需要处理复杂数据结构和大型数据库的企业级应用程序开发。其强大的实体模型设计和高性能的数据访问能力使其特别适合于大规模数据驱动型应用的开发和维护。

5.2 安装与配置

5.2.1 安装指导

首先,您需要到 LLBLGen Pro 官方网站 下载安装程序。安装完成后,您可以按照安装向导的步骤进行配置,并激活许可证以开始使用LLBLGen Pro。

5.2.2 基本配置

安装完成后,您可以根据项目需求设置连接字符串和其他基本配置信息。LLBLGen Pro 提供了直观且易于理解的配置界面,使得基本配置变得简单快捷。

5.3 API 概览

5.3.1 实体模型设计

LLBLGen Pro 提供了一套强大的实体模型设计工具,允许开发者通过直观的界面来定义和管理实体之间的关系,属性和约束。下面是一个简单的实体模型设计示例:

using SD.LLBLGen.Pro.ORMSupportClasses;

// Define the entity
public class CustomerEntity : EntityBase
{
    public string CustomerId { get; set; }
    public string ContactName { get; set; }
    // Other properties...
}
5.3.2 查询构建

LLBLGen Pro 提供了灵活而强大的查询构建功能,使得开发者可以轻松地构建复杂的数据库查询。以下是一个基本的查询构建示例:

using SD.LLBLGen.Pro.QuerySpec;
using MyProject.DatabaseSpecific;

// Build a query
var qf = new QueryFactory();
var customerQuery = new EntityCollection<CustomerEntity>(qf.Customer);

// Add conditions
customerQuery.Where(CustomerFields.Country.Equal("USA"));

// Execute the query
var results = new DataAccessAdapter().FetchQuery(customerQuery);

以上便是LLBLGen Pro 的简要概述。如果您对LLBLGen Pro 感兴趣,可以访问 官方网站 获取更多详细信息和文档。

6. PetaPoco:一个轻量级的微ORM库

6.1 简介

PetaPoco 是一个轻量级的微ORM(对象关系映射)库,旨在简化数据库访问和操作。它使用简单、轻巧,性能卓越,非常适合快速开发和小型项目。

6.1.1 核心功能

PetaPoco 提供了简洁易用的 API 来执行 CRUD 操作,支持批量操作以及灵活的配置选项。它还具有自动映射数据库表到 C# 对象的能力,减少了手动编写 SQL 查询语句和对象映射代码的工作量。

6.1.2 使用场景

PetaPoco 适用于小型项目或需要快速开发的场景,尤其是对于那些不需要过多复杂 ORM 功能、希望保持代码精简的开发者来说,是一个不错的选择。

6.2 安装与配置

6.2.1 安装指南

你可以通过 NuGet 包管理器来安装 PetaPoco,也可以直接从官方 GitHub 仓库中获取源码进行构建。以下是通过 NuGet 安装 PetaPoco 的方法:

Install-Package PetaPoco

更多安装信息,请参考 PetaPoco 官方文档

6.2.2 基本设置

安装完成后,在使用 PetaPoco 之前,需要进行基本的配置,包括指定数据库连接字符串等。下面是一个简单的示例:

Database db = new Database("ConnectionStringName");

6.3 API 概览

6.3.1 CRUD操作

PetaPoco 提供了一套简洁明了的 API 用于执行 CRUD 操作。以下是一个简单的示例,展示了如何使用 PetaPoco 进行数据查询和插入操作:

// 查询
var user = db.Single<User>("SELECT * FROM Users WHERE UserId = @0", userId);

// 插入
var newUser = new User { Name = "John", Age = 25 };
db.Insert(newUser);
6.3.2 批量操作

除了基本的 CRUD 操作外,PetaPoco 还提供了便捷的批量操作方法,例如批量插入、批量更新等。以下是一个批量插入的示例:

List<User> users = new List<User>
{
    new User { Name = "Alice", Age = 30 },
    new User { Name = "Bob", Age = 28 }
};
db.InsertBulk(users);

更多 API 和示例代码,请参考 PetaPoco GitHub 仓库

通过以上介绍,相信你已经对 PetaPoco 有了初步的了解,如果想要深入学习和了解更多细节,欢迎访问官方文档和社区。 PetaPoco 的简洁性和高效性使其成为众多开发者喜爱的微ORM库之一。

总结

通过本文的阅读,读者可以获得对多个 .NET ORM 框架的全面了解。NHibernate 是一个功能丰富的 ORM 框架,适用于复杂的领域模型;Entity Framework Core 则是一个轻量级、易扩展的 ORM 框架,适合新项目和小型团队;Dapper 则以其高性能和轻量级著称,适用于需要追求极致性能的场景;FluentNHibernate 和 PetaPoco 则分别提供了针对 NHibernate 和微ORM 的增强功能;而商业级的 LLBLGen Pro 在企业级应用中有其独特的优势。不同的项目需要根据自身特点选用合适的 ORM 框架,综合考量性能、功能和易用性等因素来做出选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】---元强化学习

目录 1. 元学习简介1.1 什么是元学习&#xff1f;1.2 元学习的应用 2. 强化学习基础2.1 什么是强化学习&#xff1f;2.2 强化学习的基本框架2.3 深度强化学习 3. 元强化学习的概念与工作原理3.1 元强化学习是什么&#xff1f;3.2 元强化学习与普通强化学习的区别 4. 元强化学习…

Arthas ognl(执行ognl表达式)

文章目录 二、命令列表2.1 jvm相关命令2.1.12 ognl&#xff08;执行ognl表达式&#xff09;举例1&#xff1a;获取静态属性举例2&#xff1a;调用静态方法 二、命令列表 2.1 jvm相关命令 2.1.12 ognl&#xff08;执行ognl表达式&#xff09; 使用场景&#xff1a; Arthas 的 …

【Vue系列五】—Vue学习历程的知识分享!

前言 本篇文章讲述前端工程化从模块化到如今的脚手架的发展&#xff0c;以及Webpack、Vue脚手架的详解&#xff01; 一、模块化 模块化就是把单独的功能封装到模块&#xff08;文件&#xff09;中&#xff0c;模块之间相互隔离&#xff0c;但可以通过特定的接口公开内部成员…

黑马智数Day2

表单基础校验实现 基础双向绑定 v-model <el-input v-model"formData.username" /> <script> export default {name: Login,data() {return {formData: {username: ,password: ,remember: }}} } </script> 表单校验配置 按照业务要求编写校验规…

231. 2 的幂 简单递归 python除法的类型

已解答 简单 相关标签 相关企业 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&…

【ollama 在linux 上离线部署 本地大模型】

本文继续来讲如何在linux上部署离线本地智能大模型&#xff0c;前篇如下&#xff1a;window上部署离线大模型 首先还是安装ollama linux版本&#xff0c;如果完全离线的话&#xff0c;可以从github上下载一个linux 版本的压缩包传上去 git hub上搜索ollama 找到右下角 找到li…

Centos/fedora/openEuler 终端中文显示配置

注意&#xff1a;这里主要解决的是图形界面、远程登录界面的中文乱码问题 系统原生的终端&#xff08;如虚拟机系统显示的终端&#xff09;&#xff0c;由于使用的是十分原始的 TTY 终端&#xff0c;使用点阵字体进行显示&#xff0c;点阵字体不支持中文&#xff0c;因此无法显…

用友与万里汇达成战略合作,共创出海企业司库管理新篇章

新加坡 2024年9月23日 在全球数字化浪潮的推动下&#xff0c;中国企业正加速融入全球贸易体系&#xff0c;面对复杂多变的国际市场环境&#xff0c;寻求更高效、便捷的跨境贸易解决方案成为众多出口企业的迫切需求。 9月23日&#xff0c;用友网络科技股份有限公司&#xff08…

KDD2024 时序论文

1、Generative Pretrained Hierarchical Transformer for Time Series Forecasting paper: https://dl.acm.org/doi/abs/10.1145/3637528.3671855 code&#xff1a;GitHub - SiriZhang45/FRNet: Code Implementation of FRNet 2、Fredformer: Frequency Debiased Transforme…

[Redis][持久化][上][RDB]详细讲解

目录 0.前言1.RDB0.是什么&#xff1f;1.触发机制2.流程说明3.RDB文件的处理4.RDB的优缺点 0.前言 Redis ⽀持 RDB 和 AOF 两种持久化机制&#xff0c;持久化功能有效地避免因进程退出造成数据丢失问题&#xff0c;当下次重启时利⽤之前持久化的⽂件即可实现数据恢复 RDB ->…

展锐平台的手机camera 系统isptool 架构

展锐平台的isptool 主要用于支持展锐各代芯片isp的各效果模块快速tuning和参数生成打包。 具体需要&#xff1a; 一、工具段能在线实时预览到调试sensor经过isp 处理后的图像&#xff0c;也就是各模块的参数在当下实时生效&#xff0c;通过工具能在PC 上在线观看到修改的效果。…

[笔记]2024大厂变频器,电机参数一览

注意中心高&#xff0c;在用铁心规格&#xff0c;功率换算表 温升曲线在预防性维护过程能用到 注意各类电流参数,上面双极对&#xff0c;下面3极对。 另一种极对数 4极对的电机参数可参考&#xff0c;不常用。 emc滤波&#xff0c; Sto,通讯接口 颜色区分的接口设计 一组新强…

基于MaxScale搭建MariaDB读写分离集群的方法【2024年最新版】

1、什么是MaxScale MaxScale是MariaDB数据库的一个中间件&#xff0c;为MariaDB提供代理服务&#xff0c;主要可以实现读写分离和一定的负载均衡功能&#xff0c;其中读写分离可将读操作和写操作分离到不同的数据库服务器上&#xff0c;以提高系统的整体性能和扩展性&#xff…

Pandas的入门操作-DataFrame对象

目录 类型 通过 pd.read_csv(xxx)返回df 将Series对象通过to_frame()转成df 使用列表 加元组返回df 使用字典返回df DataFrame对象的常用属性和方法 常用属性 常用方法 实例 DataFrame对象的运算 加载数据 字符串的运算 字符串和数字(会报错) 根据下表获取数据 类…

第 1 章:Vue 核心

1. Vue 简介 1.1. 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/&#xff1a;中文官网里面【教程】和【API】是比较重要的。用到api就去查询&#xff0c;实践当中记忆更牢靠。 风格指南&#xff1a;官方推荐写的一个代码风格cookbook&#xff1a;编写v…

浙江省计算机三级网络及安全技术资料(最后有我考完后的想法)

还有一周就要考试了&#xff0c;网上几乎找不到浙江省的计算机三级网络及安全技术的复习资料&#xff0c;大部分都是全国计算机三级的复习资料&#xff0c;气得我直接对着大纲一部分一部分找过去。以后的友友们需要的自取&#xff0c;为了能够顺利通过浙江省计算机三级考试&…

『功能项目』按钮的打开关闭功能【73】

本章项目成果展示 我们打开上一篇72QFrameWork制作背包界面UGUI的项目&#xff0c; 本章要做的事情是制作打开背包与修改器的打开关闭按钮 首先打开UGUICanvas复制button按钮 重命名为ReviseBtn 修改脚本&#xff1a;UIManager.cs 将修改器UI在UGUICanvas预制体中设置为隐藏 运…

FP7208:升压汽车车灯方案 高效稳定的电力支持

前言 近年来随着汽车的不断普及&#xff0c;车灯方面也在不断发展&#xff0c;车灯对于汽车不仅是外观件更是汽车主动安全的重要组成部分。灯光在保证照亮前部道路的同时&#xff0c;还要确保不对对面车辆产生眩目影响。同时需要针对不同路况和不同载荷引起的灯光偏离进行调整&…

Linux:文件描述符详解

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的所有进程&#xff0c;都拥有自己的文件描述符(File Descriptor, FD)&#xff0c;它是操作系统在管理进程和文件时的一种抽象概念。每个文件描述符由一个非负整…

胤娲科技:DeepMind的FermiNet——带你穿越“薛定谔的早餐桌”

当AI遇上量子迷雾&#xff0c;FermiNet成了你的“量子导航仪” 想象一下&#xff0c;你早晨醒来&#xff0c;发现家里的厨房变成了薛定谔的实验室&#xff0c;你的咖啡杯和吐司同时处于“存在与不存在”的叠加态。 你伸手去拿&#xff0c;却不确定会不会摸到冰冷的空气或是热腾…