Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
基本上,我想将多个布尔值和字节(以存储值)与预制类(如果必须知道,则为RenderTarget2D)有效地配对。
显然,我可以将所有这些包装在一个类中,但是在某些情况下,我将拥有许多此类包装,并且希望在可能的情况下节省内存(即使用结构)。
我知道使用带有引用变量的结构是不好的行为,我宁愿不要仅使用单独的变量来保存信息(而是将它们配对在一起)。
本质上,我想要一个结构来保存对类,布尔值和字节的引用,并为此创建一个2D数组以构成许多对象(因此正在寻找减少内存使用的方式)
我是否忽略了一个明显的解决方案?
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
基本上,我想将多个布尔值和字节(以存储值)与预制类(如果必须知道,则为RenderTarget2D)有效地配对。
显然,我可以将所有这些包装在一个类中,但是在某些情况下,我将拥有许多此类包装,并且希望在可能的情况下节省内存(即使用结构)。
我知道使用带有引用变量的结构是不好的行为,我宁愿不要仅使用单独的变量来保存信息(而是将它们配对在一起)。
本质上,我想要一个结构来保存对类,布尔值和字节的引用,并为此创建一个2D数组以构成许多对象(因此正在寻找减少内存使用的方式)
我是否忽略了一个明显的解决方案?
最佳答案
将问题理解为:
您需要一个包含bool
,byte
和类RenderTarget2D
的实例的东西。
在这种情况下,您可以使用Tuple<bool, byte, RenderTarget2d>
。
创建自定义类或结构也是可行的选择。实际上,有人建议“ C#7”包括本机语言tuples(不会是System.Tuple),并且如当前所写,它们将是结构。
您可能还想考虑引用RenderTarget2d
可以延长其寿命。
结构与类
该结构在内存中(压缩时)占用bool
的大小加上byte
的大小加上引用的大小(到RenderTarget2d
)。如果您有600 x 600(360000)这样的结构的数组,则它将占用内存中该结构的大小360000。
如果使用类,则该数组将对数据的实际位置有360000个引用,这些引用总共至少与结构数组一样多。
因此,使用结构应该占用更少的内存...
但是,当您从数据结构中获取结构时,实际上是在制作副本。因此,每次访问数组以获取项目并读取该项目的属性时,实际上是在制作该项目的副本并从该副本中读取属性。
如果要更新它,则需要对其进行读取(按上述方式进行复制)进行编辑,然后再放回去……然后将数据复制到阵列中。
因此,如果内存是主要问题。使用结构。引用乔恩·斯基特的话:“只要您知道后果”。
使用struct还意味着更少的RAM往返。不仅因为它避免了解析引用,而且还因为保证了数据相互靠近。由于CPU将在缓存中加载数据结构的一部分(或全部),并且由于代码未使用外部引用,因此它可以将其保留在缓存中而不用加载其他内容,从而提高性能。 。
10-05 18:46