当前位置: 代码迷 >> C# >> 相关C# Dictionary的性能优化
  详细解决方案

相关C# Dictionary的性能优化

热度:808   发布时间:2016-05-05 04:41:23.0
有关C# Dictionary的性能优化
小弟在做公司的一个底层模块的优化,这个模块负责把一个复杂结构序列化为byte[] m_array, 
大半个月前优化功能测试完毕以后,测试对我C#部分的优化结果仍然不满意,要求继续寻找优化点
我用visual studio 2010的profiler工具分析了一下,发现基本上都是clr.dll消耗的时间。
这个就比较麻烦了,clr.dll应该是MS自己的一个dll,我可动不了啊。
------解决思路----------------------
C++里有字典?或者任何能够自动扩展的集合?我怎么不知道
C#为了定义可自动扩展的集合,后台做了大量的工作,封装了好多层,调用起来当然会慢,但是也方便啊

系统的性能是一定的,除非你升级硬件
否则要么牺牲时间换空间,要么牺牲空间换时间,没有一种两者兼得的方法
当然前提是算法不要太烂,既浪费空间又浪费时间
------解决思路----------------------
byte流那个叫做 MemoryStram 或者 List<byte>。

引用:
想请教下C#里面是否有类似跟vector差不多的容器,可以对它进行
insert和push_back操作,并且是个连续内存块,能够直接将其转成byte[]数组的。

如果没有的话,我在网上查到可以通过非托管内存(或者直接call C++ dll)的方式来实现,
不知道这种方式是否支持可以变长的容器。


至于说你对一个 Dictionary<,>还要 foreach,这种性能损失只有你们自己承担了。
------解决思路----------------------
你的程序需不需要 Dictionary<,>,以及为什么要序列化一个带有Dictionary<,>的东西(比如说,做数据同步时,为什么要传整个数据库大文件而不是自动续传记录集合),你需要自己去判断这些东西。
------解决思路----------------------
引用:
不过其实如果是vector的话,取值我也可以通过类似的key来取,因为我可以直接记住想取的那个值的offset,从而就像数组中一样直接读取的

那么这个key又存放在哪里,你总得先遍历一下匹配key,再获取value吧,这不是一回事吗
C#里你可以创建一个足够大的byte数组,比如1000000,然后就把它当可变长度的数组来用,当然最终发送的时候不要无脑整个发送,而是实际使用了多少就发送多少就好.
  相关解决方案