惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
O
OpenAI News
Cloudbric
Cloudbric
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
J
Java Code Geeks
Help Net Security
Help Net Security
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
Security Archives - TechRepublic
Security Archives - TechRepublic
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
人人都是产品经理
人人都是产品经理
H
Help Net Security
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
W
WeLiveSecurity
Stack Overflow Blog
Stack Overflow Blog
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
Jina AI
Jina AI
S
Security @ Cisco Blogs
月光博客
月光博客
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
TaoSecurity Blog
TaoSecurity Blog
MongoDB | Blog
MongoDB | Blog
WordPress大学
WordPress大学
F
Fortinet All Blogs
S
Securelist
M
MIT News - Artificial intelligence
V
Vulnerabilities – Threatpost
小众软件
小众软件
T
Tenable Blog
Y
Y Combinator Blog
T
Threat Research - Cisco Blogs
博客园 - 叶小钗
N
News | PayPal Newsroom
A
About on SuperTechFans
C
CERT Recently Published Vulnerability Notes
Cyberwarzone
Cyberwarzone
L
Lohrmann on Cybersecurity

C#

asp net core 的工作站模式和服务器模式的区别 - V2EX C#上位机开发是用 winform 那种传统工业风还是 WPF 现代风 - V2EX paddleocr 的 C#集成问题 - V2EX C#中异步相关的问题 - V2EX .NET 换新的异步编程模型了,性能很强 - V2EX 想念 C# - V2EX 200 块有偿求助 C#高速读取串口,导致软件闪退的问题。 - V2EX 老师,我太想进步了——关于 C#学习 - V2EX visual studio 2022 代码提示消失 - V2EX Cursor 生成的代码有个大坑,排查了一晚上才找出原因 - V2EX 有没有 Sematic Kernel 可以落地的应用推荐? - V2EX 请教下 C#有没有办法用装饰器全局监控方法执行时间 - V2EX 想用 c#的 mvc 实现一个功能. - V2EX Unity 双击 C#脚本默认打开 Visual Studio 没有代码提示如何解决? - V2EX 请问 c#有没有一些能规范学习的生产管理系统开源项目? - V2EX C#串口通信问题 求教 - V2EX C# 怎么同时交叉编译 windows Linux mac ?跟 go 一样 - V2EX ClosedXML 如何对一列数据设置高亮重复项?(高亮重复项是 Excel 的一种功能;不能手动给重复单元格设置背景颜色,这样的话用户删除重复项后不会自动去除高亮) - V2EX 求推荐软件开发练习项目的教学视频或书籍 - V2EX 如何在 visual studio 2022 中新建单元测试项目时默认使用最新版本? - V2EX C#有像 C++的 libevent 同样定位的高性能跨平台网络库吗? - V2EX 求助,如何正確劫持系統 DLL 調用 - V2EX C#生态里有啥简单一点的容易上手的开源后台管理系统吗? - V2EX .NET6 HttpClient 无反应也不超时? - V2EX 关于.NET6 httpclient 用 IPV6 还是 IPV4 的疑问 - V2EX 关于 C#调用 DLL 的疑惑 - V2EX C#程序员开发手机页面有什么适合的 UI 框架? - V2EX 求教大佬,用 C#如何操作 word 文档 - V2EX 如何配置环境变量才能让 dotnet 和 ipconfig 都可以工作? - V2EX C#的二维码摆渡解码遇到点问题 - V2EX 请教一个 sha256withecdsa 签名的问题 - V2EX C#中有什么专有名词来定义 方法.方法 这种调用方式么? - V2EX 请问是否有 C# “官方”文档? - V2EX 关于 c#软件的逆向分析 - V2EX c#程序里的一个字符串参数,可以在生成的 exe 文件里搜索到吗? - V2EX C#新建项目后新建的各种文件的作用是什么? - V2EX 请问这个访问控制声明是否有点多余? - V2EX 请教, c#语言中,一个回调函数中使用 lock 部分执行较慢的代码,后续执行回调函数中 lock 操作执行顺序是不是不能保证先执行顺序 - V2EX 既然已经继承了 BCL 中的 IComparable 接口,为什么还要自己写 CompareTo 方法的实现? - V2EX C#中类 类型的变量是通常所说的“对象么?”类的实例又是什么? - V2EX C#单元测试为什么不能过多使用 setup? - V2EX C# 类中的这个构造函数能不能省略? - V2EX 如何让 C# 窗体标签的语言默认是中文? - V2EX C# 中 this 关键字在 Forms 类中使用的困惑 - V2EX 2023 年了,值得入行 C#上位机吗? - V2EX 想学习辉芒微单片机开发,有大佬有学习资料和方式吗 - V2EX 使用 C#的 HPSocket 的一个问题 - V2EX C# 有没有 Rust 和 Lisp 那样, if/match 能直接求值,像三目运算符一样的功能? - V2EX 泛型存 List 的一个问题 - V2EX 有 C++基础入门 C#有推荐的书或课程吗,准备学习 unity 游戏开发
C# 有哪些显著的缺点? - V2EX
w568w · 2025-01-05 · via C#

这是一个创建于 525 天前的主题,其中的信息可能已经有所发展或是发生改变。

之前久仰 C# 大名,但一直没实际接触过,一是感觉微软的东西都不靠谱,二是觉得这语言只有游戏产业和 ASP.NET 服务器在用,三是不知道从哪里留下了「 C# 运行性能特别差」的印象。

今天在 Windows 上写了个小数据处理脚本,出于好奇去安装了一下 .NET 9 ,用 GPT 把 Python 转成了 C# 去跑,发现这东西跑起来飞快,比 Python 快了不止七八倍,CPU 也吃满了。

继而去查了一下 Debian 的 The Computer Language Benchmarks Game 。不看不知道,好家伙,现在 C# aot 都能在 CLBG 排到 Go 头上去了:

Language elapsed secs / fastest
Intel C 1.1
C 1.3
C# aot 1.5
Java 1.5
Go 1.6

虽然性能测试和 Java 差不多,但内存占用要少 50%~70%。试了一下 AOT 编译,编译出来就一个 4~5MB 可执行文件,体积很小也无依赖,额外开销基本和 Rust 、C++ 那些原生语言差不多无感。

但这可是带 GC 的「重型」语言啊,微软这几年的优化确实厉害。

所以感觉这语言挺有意思,准备最近多花时间当兴趣学习一下,但还是对微软的东西不是很放心。问问各位 C# 开发:C# 有什么特别明显缺点或者写起来卡手的地方吗? 提前谢谢大家。

  • C#
  • 性能
  • GC

    45 条回复    2025-05-10 20:24:01 +08:00

    gpt5

    1

    gpt5      2025 年 1 月 6 日 via iPhone   ❤️ 1

    容易念不对名字

    neteroster

    2

    neteroster      2025 年 1 月 6 日 via Android   ❤️ 1

    语言感觉挺好的。我来提一个显著的:官方调试器 vsdbg 是专有的,所以如果你用除 vs 和 vscode 等之外的部分编辑器的话(例如 cursor )就会有调试方面的问题,只能用一些平替调试器

    zh3256

    3

    zh3256      2025 年 1 月 6 日

    基本是个语言都会比 python 快, GIL 锁导致 python 单进程顶天了跑一个核.

    w568w

    4

    w568w      2025 年 1 月 6 日

    @gpt5 C Sharp 太拗口了,我还是喜欢念 C 、C 艹、C 井,哈哈

    @neteroster 用 Jetbrains 的 Rider 是不是就没有这个问题了?

    @z1829909 确实,不过我看翻译出来的 C# 代码也没用多线程(至少明面上没用),可能还是 Python 的 JSON 解析和数组处理效率太低了。

    maigebaoer

    5

    maigebaoer      2025 年 1 月 6 日 via Android   ❤️ 1

    缺点就是互联网公司用的少

    geelaw

    6

    geelaw      2025 年 1 月 6 日 via iPhone   ❤️ 2

    有一些很坏的特性,比如数组逆变(性能有极大损失),类型兼容性版本太多并且不一致(比如装箱 int 不可以拆箱为 uint ,但装箱的 int enum 可以拆箱为 int ,但 int[] 是 uint[],并且我永远记不住 int[] 是不是 int enum 数组;完全采用依名判定会简单很多),再比如实现多个可变接口时可变接口解析的歧义性,当然这都是 CLR 的问题。

    C# 自己的问题大概是加入一些不必要的限制,比如古代的 C# 语言不许用 Enum 作为范型约束,虽然它完全有意义并且自古以来就受到 CLR 的支持。

    geelaw

    7

    geelaw      2025 年 1 月 6 日 via iPhone

    @geelaw #6 “数组逆变”应该更正为“数组协变”。

    smilenceX

    8

    smilenceX      2025 年 1 月 6 日   ❤️ 1

    @w568w #4 , 我不确定 Rider 是不是用的官方调试器,但在开发过程中,调试完全没问题。

    v2er4241

    9

    v2er4241      2025 年 1 月 6 日

    一直用 C#,很顺滑,缺点就是换个语言就觉得很难用。

    HairShort

    11

    HairShort      2025 年 1 月 6 日 via Android

    函数名是大驼峰,javaer 各种别扭

    glcolof

    13

    glcolof      2025 年 1 月 6 日   ❤️ 1

    C#有一个所有语言都有的通病:缺乏优秀的、使用广泛的跨平台 UI 框架。

    niubee1

    15

    niubee1      2025 年 1 月 6 日   ❤️ 1

    你在发微博发推发知乎的时候容易发出莫名的话题

    june4

    16

    june4      2025 年 1 月 6 日

    珍爱生命,远离 .net

    dwu8555

    17

    dwu8555      2025 年 1 月 6 日

    C#语言挺好的,Linq 相当牛逼。

    但是感觉还是没有 Golang 用着有感觉

    Skifary

    19

    Skifary      2025 年 1 月 6 日

    缺点:是微软开发的
    优点:是微软开发的🐶

    gadfly3173

    22

    gadfly3173      2025 年 1 月 6 日 via Android   ❤️ 1

    linux 上的缺点:C#的 FileSystemWatcher 只支持每个实例侦听一个目录,并且每侦听一个目录就需要创建一个 inotify 实例,而一般 linux 的 inotify 实例上限一般是 128 。如果你要用 C#做一个需要监听多个目录变化的程序,那么很容易达到这个上限,导致系统上无法再创建任何 inotify 实例。这个问题看起来 node.js 和 java 都是没有的。😓

    dotnet/runtime#62869

    gadfly3173

    24

    gadfly3173      2025 年 1 月 6 日 via Android

    @HFX3389 可以的,publish 的时候指定--self-contained 就行。一个使用.net9 aot 编译的例子就是 sourcegit-scm/sourcegit

    csys

    25

    csys      2025 年 1 月 6 日   ❤️ 1

    最致命的问题是生态,尤其是在国内

    其它的问题比如函数染色是许多其它编程语言也有的,但是生态完全是独一份的致命伤,而且越来越致命

    另一个隐藏的问题是微软,微软给 C#/.NET 提供了持续的高质量的支持,但是又不断地扼杀 C#/.NET 社区

    Akiya

    26

    Akiya      2025 年 1 月 6 日

    缺点就是你用了 C#之后再用别的语言就用的没那么舒服了

    Bronya

    27

    Bronya      2025 年 1 月 6 日   ❤️ 1

    我自己写程序经常用 C#,手上还有个用 blazor 写的面板工具,一些脚本处理也都是用 dotnet-script 方便一键运行,需要图形界面的话就用 WPF 搞。
    目前为止遇到的问题有(包括语言及生态):

    * AOT 不支持交叉编译
    * self contained 模式下部分库对修剪功能支持不到位,导致想写个程序给没有安装 run time 的机器上运行时,必须打包整个运行时,会使打包文件过大(几行代码打包下载近百兆,修剪了又会报错。)。
    * rider 对 blazor 热重载支持不如 vs ,经常需要重启。而 vs 又经常无法识别代码,经常没有问题的代码会报错,关闭重新打开就又好了( vs 2022 )。
    * 经常会纠结到底用不用可空类型。
    * 有些东西如果不按照官方的推荐搞,会变得很麻烦。比如 blazor 中的认证,如果不用官方的 Idendity 包,会很麻烦,但是官方包里东西又太多了,我仅仅想要个用户名密码验证而已。
    * 异步函数传染问题(这点真没 go 方便)
    * 没有好的方式写安卓应用( MAUI 问题太多了)

    ZGame

    28

    ZGame      2025 年 1 月 6 日

    相比较 java 来说,优点是写起来太顺畅了。 缺点是没有布道师,和相应的广泛的开源生态和 copy 代码。

    zh3256

    29

    zh3256      2025 年 1 月 6 日 via Android

    @chenqh 一般 python 的 web 项目不也是起多个进程,每个进程里走异步 io ,如果纯单进程 cpu 满了,会影响他调度造成超时。

    w568w

    30

    w568w      2025 年 1 月 7 日

    @geelaw 感谢。关于数组协变,我的想法是不是 C# 根本不应该支持在数组上自动协变?下面也有朋友提到协变后的数组写入其他类型的元素是运行时错误,极难检查。

    @niubee1 @ShinichiYao 此话怎讲?

    @DTCPSS 看了一下,很有收获,确实把语言中最肮脏的设计都列出来了。(好在 Java 等 GC 语言也共享了几个,比如无 Destructor 。)

    @gadfly3173 看起来也没有那么难修复,感觉是微软特有的 Windows 中心思维在作祟。不知道 Mono 有没有同样的问题?

    @csys @ZGame C# 的生态非常差吗?我看 NuGet 上的库挺多的(虽然基本都是围绕 Windows 转)。

    @Bronya 感谢。「异步函数传染」这点,其实我写 Rust 、Python 、Dart 、Kotlin…… 早就习惯了,所有函数全部染色就好了,现在写 Go 好像也没什么感觉了。「 Self-contained 修剪不到位」这个确实是有点硬伤,我得多写程序测试测试。

    geelaw

    31

    geelaw      2025 年 1 月 7 日 via iPhone

    @w568w #30 数组可变性是从 JVM 抄到 CLR 里最恶心的特性之一,根本不应该支持。解决方法是 public readonly struct S<T> where T : class { public readonly T O; public S(T o) { O = o; } } 然后用 S<T>[]。

    Jlzeng

    32

    Jlzeng      2025 年 1 月 7 日

    aot 和很多现代特性不兼容(反射、emit 、动态加载 dll )没法既要又要。

    yuandong

    34

    yuandong      2025 年 1 月 7 日

    国内大公司用的少,优秀的 C#程序员也少

    hez2010

    35

    hez2010      2025 年 1 月 11 日

    @geelaw 其实 int 和 enum 的类型转换那块儿是对 C++ 行为的兼容,类似的还有 0 可以不需要转换就能赋值给任何的 enum 。

    geelaw

    36

    geelaw      2025 年 1 月 11 日

    @hez2010 #35 我说的是装箱拆箱的问题,不是 int 和 enum 存在转换的问题。

    StringSpiltOptions e = (StringSplitOptions)1;
    int i = (int)e;

    不是

    object o = (StringSplitOptions)1;
    int i1 = (int)o; // bad, but works
    int i2 = (int)(StringSplitOptions)o; // good, and works

    装箱拆箱在 C++ 标准里最接近的是 std::any_cast ,它并不允许把存放了 enum 的 any 通过 any_cast 变成 int ,但这个论证无意义,因为 C++ 的 any 比 CLR 晚了很久。

    另一个接近的是 C++ 允许 std-layout type 的 pointer 和它 first member 的 pointer 做 reinterpret_cast ,但是 C# 里面装箱后的值类型(根据 CLR 定义,这是和值类型不同的、一个自动产生的类型)应该理解为多态类型(“具有虚表”),此时不是 std-layout ,所以也不适用这个类比。

    nebkad

    39

    nebkad      2025 年 1 月 16 日   ❤️ 1

    ref struct, struct, record struct, readonly struct.....
    过于甜了,最近几年加的语法糖太多显得很乱,功能不是很正交,类型系统瑕疵很多,譬如楼上 GeeLaw 提及的
    现在好像 ref struct 还不能实现 interface ( C# 13 据说可以了?)然而对于高性能 IO 来说 ref struct 又很重要
    但是 LINQ 真的值得吹爆,至今找不到竞品

    shiloh595

    40

    shiloh595      2025 年 1 月 21 日

    LINQ is best:)

    chaoyebugao

    41

    chaoyebugao      2025 年 2 月 6 日

    其实生态还过得去,国外用户很多,国内却不感冒

    niubiman

    42

    niubiman      2025 年 2 月 11 日

    @sagaxu mysql 驱动一般也是用第三方的 MySqlConnector ef 用基于 MySqlConnector 的 pomelo.entityframeworkcore.mysql

    maymay5

    43

    maymay5      2025 年 2 月 20 日

    微软开发的,国内厂商就会马上应激,会不会被美帝国主义卡脖子,这无解,你说开源啥的都没用,因为付钱的才不管这些也不懂这些,是微软的,美国的,不行的 java 为什么行,因为 java 跟甲骨文在非程序员圈子我觉得比较低调,不懂技术的只知道 java 开源免费完全不知道有甲骨文这件事

    roundgis

    45

    roundgis      2025 年 5 月 10 日 via Android

    @glcolof 這玩意就是個天坑導致大家都用 css 糊 ui