小弟在做公司的一个底层模块的优化,这个模块负责把一个复杂结构序列化为byte[] m_array,
大半个月前优化功能测试完毕以后,测试对我C#部分的优化结果仍然不满意,要求继续寻找优化点
我用visual studio 2010的profiler工具分析了一下,发现基本上都是clr.dll消耗的时间。
这个就比较麻烦了,clr.dll应该是MS自己的一个dll,我可动不了啊。
------解决思路----------------------
C++里有字典?或者任何能够自动扩展的集合?我怎么不知道
C#为了定义可自动扩展的集合,后台做了大量的工作,封装了好多层,调用起来当然会慢,但是也方便啊
系统的性能是一定的,除非你升级硬件
否则要么牺牲时间换空间,要么牺牲空间换时间,没有一种两者兼得的方法
当然前提是算法不要太烂,既浪费空间又浪费时间
------解决思路----------------------
byte流那个叫做 MemoryStram 或者 List<byte>。
至于说你对一个 Dictionary<,>还要 foreach,这种性能损失只有你们自己承担了。
------解决思路----------------------
你的程序需不需要 Dictionary<,>,以及为什么要序列化一个带有Dictionary<,>的东西(比如说,做数据同步时,为什么要传整个数据库大文件而不是自动续传记录集合),你需要自己去判断这些东西。
------解决思路----------------------
那么这个key又存放在哪里,你总得先遍历一下匹配key,再获取value吧,这不是一回事吗
C#里你可以创建一个足够大的byte数组,比如1000000,然后就把它当可变长度的数组来用,当然最终发送的时候不要无脑整个发送,而是实际使用了多少就发送多少就好.