我有一个性能计数器报告类,它包含在多个成员不同的列表中。有没有一种巧妙的方法告诉班级其消耗的内存限制(为了防弹情况,列表将被推送大量数据),或者我应该去每个成员并将其更改为阻止列表?(这在某种程度上不那么动态)
1 回答
你问的没有意义。一个类如何限制它的内存消耗?
考虑:您有一个公共属性,它是一个数据列表。您将该属性的值设置为 2GB 的数据集,但该类限制为 100MB。班级如何决定丢弃哪些数据?被丢弃的数据会发生什么?程序的其余部分如何处理一半数据消失的事实?
这些问题都没有得到明智的回答,因为每个程序都会有不同的答案。因此,您必须自己实现这样的逻辑。
但是,更重要的是,您应该考虑这一点:如果我创建一个List<int>
包含 2GB 数据的列表,并将此列表分配给您的“报告器类”的属性,那么您的报告器类的内存消耗不会改变。这是因为您的记者类有一个属性 a List<int>
,这意味着该属性存储了 a 的内存地址,该地址List<int>
保存在堆中的其他位置。这个内存地址——指向我们认为的属性“值”的指针——根据你的机器/应用程序的架构是固定的,永远不会改变。当你的指针是相同的大小null
就像指针指向 2GB 列表时一样。所以从这个意义上说,你的类本身的内存消耗不会像你想象的那么大。
您可以将问题重新定义为“在计算消耗时,包括我的属性指向的所有对象”,但这有其自身的问题。如果将 分配给List<int>
两个不同对象的属性,每个对象都有自己的内存限制,会发生什么?
另外,如果您的报告类有两个可以保存大数据的属性,并且我为每个属性分配了很大的值,那么您如何决定丢弃什么?如果我对 class有 100MB 的限制,并将 200MB 的数据分配给一个属性,将 1GB 的数据分配给另一个属性,我应该截断哪些数据?如果我随后清除其中一个属性会发生什么 - 我现在有“备用”内存消耗,但数据已无法挽回地丢失。
简而言之:这是一个非常复杂的请求要求。您必须创建自己的逻辑来实现它,而且您不太可能找到任何“标准”来处理它,因为没有两个实现是相同的。