大佬教程收集整理的这篇文章主要介绍了C#中小类的内存优化,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class MyClass { public MyEnum Class { get; private set; } public int a { get; private set; } public int B { get; private set; } public int C { get; private set; } public int D { get; private set; } }
目前该软件能够处理大至5-20列×100万行的矩阵,但我想将行数增加到接近1000万.我不相信我可以做很多事情来减少字符串矩阵的占用空间,但我想减少MyClass的内存占用.
我可以使用short作为列A的类型,使用byte作为B,C和D的类型,尽管这需要相当大的代码重构.
我的问题,或者说是问题:
>是否值得重构代码以使用short和byte?
>我还应该将MyEnum重构为字节类型吗?
>我还能做些什么来提高课程效率吗?
非常感谢您的时间!
编辑:多一点上下文 – MyClass的矩阵是从字符串矩阵创建的,用于分析.字符串矩阵通过普通网络连接从文本文件中拉出,因此将任务拆分为较小的块并不理想.
如果从类切换到结构(值类型),矩阵将直接存储MyClass实例,而不是指向MyClass实例的指针.因此,您将为每个实例保存8B.
现在,内存使用率降至4.8GB.
如果您进一步调整实例变量,使用1个短3个字节,并将枚举转换为字节,则每个实例仅使用6B.因此,总内存使用量将降至1.2GB.
无论如何,它将不止于此,因为托管环境在每个对象中存储了一些其他元数据,并且因为内存对齐需要填充对象以获得更快的访问时间.
PS:您实际上不需要更改属性的返回类型.您可以封装类型更改,并在MyClass的实现中执行强制类型转换,如:
struct MyClass { private short a; //Also consider ushort,if you need it //... public int a { get { return a; //Automatic promotion } private set { a = (short) value; System.Diagnostics.Debug.Assert(a == value,"Integer overflow"); } } //... }
这样,优化对使用MyClass的代码是透明的.
以上是大佬教程为你收集整理的C#中小类的内存优化全部内容,希望文章能够帮你解决C#中小类的内存优化所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。