zoukankan      html  css  js  c++  java
  • 获取本机内存使用信息、DataTable占用内存空间

    相当于windows系统中的任务管理器,功能是通过系统的API实现的本机的监视,代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Data;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    namespace Demo
    {
    /// <summary>
    /// 检测内存信息
    /// </summary>
    public class CheckMemoryInfo
    {
    [StructLayout(LayoutKind.Sequential)]
    public struct MEMORYSTATUSEX
    {
    public int dwLength;
    public int dwMemoryLoad;
    public long ullTotalPhys; //内存总数
    public long ullAvailPhys; //可用物理内存
    public long ullTotalPageFile; //分页数据
    public long ullAvailPageFile; //未分页数据
    public long ullTotalVirtual; //虚拟内存总数
    public long ullAvailVirtual;//可用虚拟内存总数
    public long ullAvailExtendedVirtual;//扩展虚拟内存
    }

    [DllImport("kernel32.dll")]
    public static extern void GlobalMemoryStatusEx(ref MEMORYSTATUSEX stat);
    /// <summary>
    /// 可用物理内存
    /// </summary>
    /// <returns>long</returns>
    public long GetAvailPhys()
    {
    MEMORYSTATUSEX memInfo = new MEMORYSTATUSEX();
    memInfo.dwLength = (int)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
    GlobalMemoryStatusEx(ref memInfo);
    return memInfo.ullAvailPhys;
    }
    /// <summary>
    /// 内存总数
    /// </summary>
    /// <returns>long</returns>
    public long GetullTotalPhys()
    {
    MEMORYSTATUSEX memInfo = new MEMORYSTATUSEX();
    memInfo.dwLength = (int)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
    GlobalMemoryStatusEx(ref memInfo);
    return memInfo.ullTotalPhys;
    }
    /// <summary>
    /// 虚拟内存总数
    /// </summary>
    /// <returns>long</returns>
    public long GetTotalVirtual()
    {
    MEMORYSTATUSEX memInfo = new MEMORYSTATUSEX();
    memInfo.dwLength = (int)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
    GlobalMemoryStatusEx(ref memInfo);
    return memInfo.ullTotalVirtual;
    }
    /// <summary>
    /// 可用虚拟内存总数
    /// </summary>
    /// <returns>long</returns>
    public long GetAvailVirtual()
    {
    MEMORYSTATUSEX memInfo = new MEMORYSTATUSEX();
    memInfo.dwLength = (int)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
    GlobalMemoryStatusEx(ref memInfo);
    return memInfo.ullAvailVirtual;
    }
    /// <summary>
    /// 获取DataTable占用内存数
    /// </summary>
    /// <param name="dt">DataTable</param>
    /// <returns>long类型,单位字节</returns>
    public long GetDataTableMemoryInfo(DataTable dt)
    {
    if (dt == null)
    {
    return 0;
    }
    MemoryStream ms = new MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();

    formatter.Serialize(ms, dt);

    ms.Position = 0;
    return ms.Length;
    }
    }
    }

  • 相关阅读:
    ORACLE各种对象、概念及关系整理(一文读懂)
    Spring面试题总结及答案
    MySQL面试总结
    可变参数,你还为方法的参数而烦恼吗?可变参数,让你的头发从此“茂密”!
    java编译报错: 找不到或无法加载主类 Demo.class 的解决方法
    java编译报错 错误: 编码GBK的不可映射字符
    sql server2017开启远程连接
    sql server一些快捷方式和操作技巧
    sql server无法连接本地服务器
    phpStorm+xdebug调试(php7.3)
  • 原文地址:https://www.cnblogs.com/yshj/p/3755344.html
Copyright © 2011-2022 走看看