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

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日

悬赏问题

  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了
  • ¥15 如何删除这个虚拟音频
  • ¥50 hyper默认的default switch
  • ¥15 网站打不开,提示502 Bad Gateway
  • ¥20 基于MATLAB的绝热压缩空气储能系统代码咨询