例如一个DataSet

解决方案 »

  1.   


    sizeof 只针对值类型...所以,基本上认为 C# 是不可能的。
      

  2.   

    在Java中有工具可以看到,在.net中不知道
      

  3.   

    ... ... 
    好像不能纯粹的找出某个DataSet所占用的内存空间吧?
    C#可以办到?
    等待强人出现
      

  4.   

    测试代码: private void button2_Click(object sender, EventArgs e)
            {
                int num = 1;
                MessageBox.Show(GetObjectSize(num).ToString());            DataSet ds = new DataSet();            MessageBox.Show(GetObjectSize(ds).ToString());            DataTable dt = new DataTable();            dt.Columns.Add("name", typeof(string));            DataRow dr = dt.NewRow();
                dr["name"] = "abc";
                dt.Rows.Add(dr);
                ds.Tables.Add(dt);            MessageBox.Show(GetObjectSize(ds).ToString());
            }        public long GetObjectSize(object obj)
            {
                MemoryStream ms = new MemoryStream();
                BinaryFormatter formater = new BinaryFormatter();            formater.Serialize(ms, obj);            ms.Position = 0;
                return ms.Length;
            }"在C#里,是不能直接获取object占用内存大小的,因为它根本不是一个标准的布局。" 
    ".net的对象占用的空间,跟其它非托管程序是一样的,只是大部分的对象,由于是托管的,而且没有规定内存布局,所以我们无法获得其真正占用内存的大小."参考:http://zhidao.baidu.com/question/73668016.html
      

  5.   

    BinaryFormatter 之后看占用量是不对的。因为BinaryFormatter 之后的东东会比原来的大,因为里面包含了很多描述信息,比如该对象所处的名字空间等等,都会被BinaryFormatter 进去。所以用这个判断是不准确的。