水木社区手机版
首页
|版面-编程技术(Programming)|
新版wap站已上线
返回
首页
|
上页
|
下页
|
尾页
|
3/4
|
转到
主题:c# 9.0 有重大改进!
20楼
|
keygen
|
2021-04-24 20:25:23
|
只看此ID
go 的 GC 效率高哪里看出来的?
之前不是饱受诟病吗?虽然后来改进了点,但也没见人吹啊
go 的字符串是 UTF8 编码的,对网络编程友好。这个比 .net 的好
【 在 leadu (leadu) 的大作中提到: 】
: go除了gc效率比.net高,别的方面是c#的子集。
: 比如channel。go的channel主要是pipe概念拼上个select。c#有Rx.NET,是pipe加上了linq那一堆操作(select、where、Distinct、Skip、Sum等),并且支持线程调整,比go的channel强大很多。
: Rx.NET也是微软出的,事实上是linq2.0
: ...................
--
FROM 113.65.10.*
21楼
|
leadu
|
2021-04-24 21:17:34
|
只看此ID
https://medium.com/servicetitan-engineering/go-vs-c-part-2-garbage-collection-9384677f86f1
根据它的测试结果,c# gc stw高,别的比go好。
不过这个作者看看就行了,他的第一篇文章比的是协程性能,他的测试结果说go性能好,然后被人在评论区优化了一版变成c#性能更好了。go的方面有人有意见但没有见到新代码
至于字符编码这事我倒是觉得差不多。正经网络程序是要序列化的,而且全中文环境utf8占更多空间。utf16在不严格的情况下数个数更快。我个人觉得很难说哪个更好。
【 在 keygen 的大作中提到: 】
: go 的 GC 效率高哪里看出来的?
: 之前不是饱受诟病吗?虽然后来改进了点,但也没见人吹啊
: go 的字符串是 UTF8 编码的,对网络编程友好。这个比 .net 的好
: ...................
--
FROM 123.115.136.*
22楼
|
keygen
|
2021-04-24 21:20:16
|
只看此ID
GC 也没啥独门秘方,这个还是看各自的取舍吧。
字符串本身utf8,写入网络流的时候,就不用额外转一次编码了,序列化也省时间。
虽然也可以事先一个个先转成字节数组备好,就是麻烦啊
【 在 leadu (leadu) 的大作中提到: 】
:
https://medium.com/servicetitan-engineering/go-vs-c-part-2-garbage-collection-9384677f86f1
: 根据它的测试结果,c# gc stw高,别的比go好。
: 不过这个作者看看就行了,他的第一篇文章比的是协程性能,他的测试结果说go性能好,然后被人在评论区优化了一版变成c#性能更好了。go的方面有人有意见但没有见到新代码
: ...................
--
FROM 113.65.10.*
23楼
|
xiaoju
|
2021-04-24 21:41:41
|
只看此ID
utf-8和unicode的转换就是个简单运算,连查表都不用,现代CPU需要考虑这种微小性能差别么?考虑一个数据结构在网络和内存中布局不同而影响性能,是80年代初码农担心的事情。
【 在 leadu 的大作中提到: 】
:
https://medium.com/servicetitan-engineering/go-vs-c-part-2-garbage-collection-9384677f86f1
: 根据它的测试结果,c# gc stw高,别的比go好。
: 不过这个作者看看就行了,他的第一篇文章比的是协程性能,他的测试结果说go性能好,然后被人在评论区优化了一版变成c#性能更好了。go的方面有人有意见但没有见到新代码
: ...................
--
FROM 27.91.71.*
24楼
|
javafish
|
2021-04-24 21:47:50
|
只看此ID
问一下
select channel在Rx里咋实现的?
垒一串zipWhen么?
【 在 leadu (leadu) 的大作中提到: 】
: go除了gc效率比.net高,别的方面是c#的子集。
: 比如channel。go的channel主要是pipe概念拼上个select。c#有Rx.NET,是pipe加上了linq那一堆操作(select、where、Distinct、Skip、Sum等),并且支持线程调整,比go的channel强大很多。
: Rx.NET也是微软出的,事实上是linq2.0
: ...................
--
FROM 115.239.231.*
25楼
|
keygen
|
2021-04-24 21:53:24
|
只看此ID
这个主要作用在于跑分
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: utf-8和unicode的转换就是个简单运算,连查表都不用,现代CPU需要考虑这种微小性能差别么?考虑一个数据结构在网络和内存中布局不同而影响性能,是80年代初码农担心的事情。
--
FROM 113.65.10.*
26楼
|
leadu
|
2021-04-24 22:19:46
|
只看此ID
分不同的情况
如果是channel返回的只有一个值,对应的c#里面直接await协程或是task.whenany即可,不需要channel的介入。
如果协程会持续返回值,不停的向channel发送值,可以使用下面这个代码示例
var s1 = Observable.Interval(TimeSpan.FromMilliseconds(250)).Take(3);
var s2 = Observable.Interval(TimeSpan.FromMilliseconds(150)).Take(5).Select(i => i + 100);
s1.Merge(s2).Subscribe(Console.WriteLine,()=>Console.WriteLine("Completed"));
也可以使用dataflow中最简单的ActionBlock<TInput>
Merge或ActionBlock的另外一个好处在于,在没有值可以处理的间隙,只有两个协程是活着的,而go似乎是3个?
【 在 javafish 的大作中提到: 】
: 问一下
: select channel在Rx里咋实现的?
: 垒一串zipWhen么?
: ...................
--
FROM 123.115.136.*
27楼
|
SpoonBoy
|
2021-04-25 11:03:23
|
只看此ID
赞,这个总结到位
【 在 leadu 的大作中提到: 】
: go除了gc效率比.net高,别的方面是c#的子集。
: 比如channel。go的channel主要是pipe概念拼上个select。c#有Rx.NET,是pipe加上了linq那一堆操作(select、where、Distinct、Skip、Sum等),并且支持线程调整,比go的channel强大很多。
: Rx.NET也是微软出的,事实上是linq2.0
: ...................
--
FROM 113.46.241.*
28楼
|
ensonmj
|
2021-04-25 12:03:01
|
只看此ID
go的string是byte数组,不强制编码
【 在 keygen (失落灵魂之囚) 的大作中提到: 】
: go 的 GC 效率高哪里看出来的?
: 之前不是饱受诟病吗?虽然后来改进了点,但也没见人吹啊
:
: go 的字符串是 UTF8 编码的,对网络编程友好。这个比 .net 的好
--
FROM 180.169.253.*
29楼
|
keygen
|
2021-04-25 19:22:24
|
只看此ID
都变成byte数组了,那肯定是编码过了啊
【 在 ensonmj (mj) 的大作中提到: 】
: go的string是byte数组,不强制编码
--
FROM 113.65.10.*
首页
|
上页
|
下页
|
尾页
|
3/4
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版