towminghai 2022-04-12 11:18 采纳率: 40%
浏览 118
已结题

C#字符串占用的堆内存无法释放问题

如题,C#使用GetFiles()获取目录下文件时,会返回一个字符串数组,由于程序运行处理的总文件数量很大,有几百万甚至上千万个,最后运行完后堆内会留下几GB甚至十几GB的字符串内存,这部分内存无论如何也释放不掉,请问有什么方法可以解决,使它能在运行完毕后清理掉这部分无效字符串内存存储?
因为是一个需要长期运行的程序,每隔一定时间就要自行对指定目录下的文件作处理,所以不得不考虑这个问题,无效内存必须可以在运行后彻底释放。每次执行时会新开一个线程调用函数进行处理,与主线程没什么关联。

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-04-12 13:22
    关注

    system("dir /b /a-d c:\. >d:\allfiles.txt");
    //读文件d:\allfiles.txt的内容即C:\下所有文件的名字
    system("dir /b /a-d /s c:\. >d:\allfilesinsub.txt");
    //读文件d:\allfilesinsub.txt的内容即C:\下所有文件的名字包含子目录
    system("dir /b /ad c:\. >d:\alldirs.txt");
    //读文件d:\alldirs.txt的内容即C:\下所有子目录的名字
    请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
    如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测