首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentDictionary存储效率

ConcurrentDictionary存储效率
EN

Stack Overflow用户
提问于 2018-05-09 15:12:13
回答 1查看 1.9K关注 0票数 1

为了让您了解上下文:我正在使用C#中的netflix实现C#算法。

数据集具有以下形式:

代码语言:javascript
复制
8: // This is the movie id
23414, 3, 16/5/2009 //User id, rate, date

我将数据作为稀疏点存储在以下数据结构中:

代码语言:javascript
复制
struct Point {
    double Norm {get; set;} // Vector norm
    ConcurrentDictionary<ushort, double> Values; // {movie:rate, ...}

    void CalculateNorm() { ... }
}
public class KMeans {
    ...
    Point[] _dataset = new Point[470758];
    ...
}

问题是,一旦加载数据集占用内存中的4gb,我就会手动触发垃圾收集器,它将内存使用量减少到一半(2gb),但我正在寻找更多最佳使用RAM的方法,因为我已经在C++中解决了这个问题,数据集在内存中只有500 2gb。

有人能给我一些建议吗?如果您想查看完整的代码:https://github.com/joalcava/Kmeans-CS/blob/master/Kmeans/KMeans.cs,我留下了一个到回购程序的链接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 15:37:47

每个字典都有一些与它相关的开销:几个int和一些对象引用,即使它是空的,然后当您开始添加项时,它所需要的空间就会增加两倍。我猜想ConcurrentDictionary与之差不多。

因此,与其在每个点上设置一个新的ConcurrentDictionary,不如尝试使用一个点数组索引和当前正在使用的键的单一ConcurrentDictionary。C# 7的新元组语法应该会使这非常容易实现。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50256712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档