首页 新闻 会员 周边 捐助

如何知道一个集合有多大?

0
悬赏园豆:5 [已解决问题] 解决于 2017-11-21 18:39

假如说,

我有一个list

这个时候,我想知道这个list占了多少内存。

又或者说,它有多少kb,多少字节。

求解。。。

临冰听雪丶的主页 临冰听雪丶 | 初学一级 | 园豆:175
提问于:2017-11-21 17:39
< >
分享
最佳答案
0

如果是.net java之类是算不出来的。list只是个引用,堆上面的大小及其中每个元素的大小这个都无法算出来。

收获园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2017-11-21 17:56

难道只能自己写了么。。。T T

临冰听雪丶 | 园豆:175 (初学一级) | 2017-11-21 18:09

@临冰听雪丶: 

你看下这个吧。

https://codeblog.jonskeet.uk/2011/04/05/of-memory-and-strings/

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-21 18:27

@Daniel Cai: 我想了一个办法,利用序列化

Public List<T> ReturnSuccessData(List<T> list)
{
    //接收分割数据
    List<T>  returnList = new List<T>();
    //将数据转换为json字符串
    Var jsonData = JsonConvert(list);
    //得到这个json字符串的长度
    var bytelength = System.Text.ASCIIEncoding.UTF8.GetByteCount(jsonData);
    //计算长度是否超过200KB
    var groupLength = (bytelength / 1024 / 200)+1;
    //根据计算出来的长度分割数据
    int j = groupLength;
       for (int i = 0; i < list.Count; i += groupLength)
       {
       List<T> cList = new List<T>();
       cList = list.Take(j).Skip(i).ToList();
        j += groupLength;
        returnList.Add(cList);
        }
    //返回分割好的数据
    Return returnList;
}
临冰听雪丶 | 园豆:175 (初学一级) | 2017-11-21 18:39

@临冰听雪丶: 你这个只是捞出来了一个数字,而且是绝对和真正内存的开销是不一致的。

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-21 19:26
其他回答(2)
0

import sys

print sys.getsizeof(obj)

北方姆Q | 园豆:1120 (小虾三级) | 2017-11-21 17:49

C# 的

支持(0) 反对(0) 临冰听雪丶 | 园豆:175 (初学一级) | 2017-11-21 18:07
0

https://www.cnblogs.com/supperwu/archive/2013/05/16/3082061.html  

顾星河 | 园豆:7281 (大侠五级) | 2017-11-21 17:49

我试过了,很奇怪,student = null的时候是20几,当赋值后就变成了负数,而且如果里面一个string越长,负数越大

支持(0) 反对(0) 临冰听雪丶 | 园豆:175 (初学一级) | 2017-11-21 18:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册