C# 的罪行罄竹难书!!!

        第一次写博客啊,最近因为QQ机器人的项目,居然让我这种不喜欢写东西的人也想着写点什么。。。

我因为写QQ机器人而掉入了程序的“坑”,mmp。

   算了,写完了QQ机器人,虽然解决了一大堆在大神看来微不足道的一些“疑难杂症”,但是,还是留下了一些对我而言的“疑案”,在此先记录一下,留作今后的思考:

    (因我的框架主要采用的是C#(包括后台用的net core),因此问题主要也是关于它的:)

 

  一. 第一个当然想到“钱”,因为微软的不作为,n年前的native项目,现在只有在netcore上有个单文件编译,在windows 平台上的framework并没有真正地实现,导致我们net开发的程序只有购买dngurad企业版才放心进行商业发行。,否则,源代码一秒钟就是别人的了!!! 机器人框架net版啊,开源,不存在的。 而且使用dnguard虽然能保证不被反编译,但还有一些小缺点,比如:对于插件式架构的net框架,每次升级dnguard的版本后,必须通知插件开发者重新引用新的框架,这也是不小的成本。另外,加壳后由于hvm的模式,瞬间只有一个方法在内存中,这样对于多线程和异步的代码,性能和速度肯定有影响。最后就是对于配置一般的机器,当不处理任何任务时,也会提示cpu 占1-2% 。也只有寄希望dngurad作者能优化一下了。。。

   二. 我感觉C#的一些原生函数以及原始部件太过原始,具体:

     1.比如substring,  一些基本的判断应该在系统层面就完成。数组越界的异常不应抛给用户。你异常自己不会直接返回空? 这个用不了多少开销。现在这样导致每次调用必须先判断有没有越界,无形多了很多代码,当然,你也可以封装。

     2.关于不固定长度的数组初始值,既然可以 string[] array={}; 这样的形式定义数组,那么是否应该支持这样定义后,array 能作为socket的缓冲区接收数据? 我经过多次测试,这样并不可以。必须得事先指定一个长度,那我假如一个udp包,很多时候接收的数据长度只有几十字节,但是每次定义都得最少1024字节吧?因为你很多时候并不能确定究竟会收到多少。无形中每次都加大了内存负担。有人可能会说,你可以用一个全局变量或静态变量,只有你定义大一点也没事,总的不会增加。但实际上这样在udp包密集的时候,经常会导致发送和接收的不是同一个包的数据,而且因为是全局,你只要一次缓冲区溢出,以后的数据都出错了。比不上每次定义的局部变量,即使本次溢出也不会影响下一次。

     3...其实,还有很多很多。。

 

  三. 你既然推行netcore,能不能学一学framework, 你2.1的东西可不可以直接在2.2,3.0运行环境中直接运行? 我测试过,阿里云可以,百度云,腾讯云就不行。这应该是阿里云优化好的原因,其他两个就是提示缺少前面版本的东西。最近一个原本2.1的项目,要安装 mariadb,但是mysql却提示最新版8.0.20 只支持netcore3.0及以上版本。这我为了一个数据库驱动,升级2.1到3.0? 如何升级,新建一个3.0项目,几百打复制粘贴,我特么。。

 

     算了,毕竟用了net这么多东西,先不喷了,以后我会好好地总结net的好。。。(哈哈哈)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值