gpt4 book ai didi

c# - 队列问题

转载 作者:太空狗 更新时间:2023-10-30 00:35:53 24 4
gpt4 key购买 nike

在我们的应用程序中,我们有一个定义如下的队列:

private static Queue RawQ = new Queue();

然后将两种不同类型的对象放入队列中,一种是来自类(class A)的对象,一种是来自struct(struct B)的对象.

当我们处理来自 Queue 的数据时,我们使用 typeof 来检查来自 Queue 的项目属于哪种类型(类 A 或结构 B)。

我的问题:

  1. 对于来自类 A 的对象,只有它们的引用被复制到队列中,而对于来自结构 B 的对象,它们的值被复制到队列中,对吗?
  2. 对于队列,一些项目是小的引用,而一些项目是更大的值(大约 408 字节)。 Queue不小的话会浪费很多内存吗?
  3. 你有更好的方法来做同样的事情吗?

谢谢,

最佳答案

for objects from class A, only their references are copied to the Queue and for object from struct B, their values are copied to the Queue, am I right?

正确。实际上,当你向队列中添加一个结构 B 时,它首先被装箱。换句话说,您的 B 实例被复制到托管堆上,并且对副本的引用被放入队列中。

for a Queue, some items are references which is small and some items are values which are much bigger (about 408 Bytes). This will waste many memory space if the Queue is not small?

可能 - 装箱 B 实例需要一个副本,这比不使用副本使用更多的内存。这取决于原件发生了什么。

408 字节对于 .NET 结构来说非常大;一般的经验法则是 structs shouldn't be bigger than 16 bytes .原因与此类似:大型结构体会因复制和装箱而引入开销。

do you have a better way to do the same thing?

我首先质疑 B 是否需要是一个结构体。另一个经验法则(这次是我的):您可能永远不需要 .NET 代码中的结构。

关于c# - 队列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com