Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何管理我的内存问题_C#_Memory Management - Fatal编程技术网

C# 如何管理我的内存问题

C# 如何管理我的内存问题,c#,memory-management,C#,Memory Management,我使用ObservaleCollection存储有关CPU使用情况的信息,并将这些信息传输到折线图中。信息每秒钟更新一次。它工作得很好,但我意识到这会随着时间的推移而阻塞我的记忆,因为它只是不断地向列表中添加信息 这种情况下的标准是什么?你会在每分钟后重新设置列表吗?我觉得每次重置时,图表的外观都会被弄乱。请告知我如何快速处理此内存问题。谢谢 ObservableCollection<KeyValuePair<double, double>> chart1 = new O

我使用ObservaleCollection存储有关CPU使用情况的信息,并将这些信息传输到折线图中。信息每秒钟更新一次。它工作得很好,但我意识到这会随着时间的推移而阻塞我的记忆,因为它只是不断地向列表中添加信息

这种情况下的标准是什么?你会在每分钟后重新设置列表吗?我觉得每次重置时,图表的外观都会被弄乱。请告知我如何快速处理此内存问题。谢谢

ObservableCollection<KeyValuePair<double, double>> chart1 = new ObservableCollection<KeyValuePair<double, double>>(); 


chart1.Add(new KeyValuePair<double, double>(DateTime.now, getCurrentCpuUsage()));
ObservableCollection chart1=新的ObservableCollection();
图表1.Add(新的KeyValuePair(DateTime.now,getCurrentCpuUsage());

根据需要存储尽可能多的信息,并删除(或保存到文件中)其余信息


如果需要存储很长时间跨度的数据(超过1M的数据点),可以尝试压缩数据。但首先要确定你的目标并衡量性能、时间/内存使用情况。

你到底应该做什么取决于你的需求

如果您只需要保留一定数量的数据(例如,10分钟或任何时间),则有界队列可能比可观察收集更合适。这样,“太旧”的事件就会自动从数据结构中消失,从而限制内存使用

如果您仍然希望将来能够访问较旧的数据,那么可以将队列末尾的数据写入文件或数据库,而不只是将其删除

有关有界队列的一种实现,请参见

由于您可能需要一个可观察的有界队列,下面是关于如何实现一个队列的一些说明(相当简单)

已解释有界队列

常规排队就像是在收银台排队。人们在队伍的尽头排队(或者像英国人说的那样排队),出纳员把人带到队伍的最前面。先进先出。先进先出


有界队列设置行的最大长度。对于现实生活中的线路,如果线路太长,就会阻止新人加入。软件中的一些有界队列也是这样工作的。保持队列长度不超过限制的另一个选项是,当队列过长时,从队列前面移除队列。在现实生活中,这可能不太公平,但对于软件算法来说,这有时正是您所需要的。

我环顾四周,确实想到了有界队列的概念,但有点令人困惑。试图通过你的链接来理解这个想法。添加了一些解释来帮助你理解有界队列的概念。在任何时候,我都希望只存储1分钟的信息。我每秒钟存储一次信息,因此有60组信息。