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

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日

    悬赏问题

    • ¥100 QT Open62541
    • ¥15 stata合并季度数据和日度数据
    • ¥15 c语言练习:统计词频
    • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
    • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
    • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色
    • ¥50 监控摄像头 乐橙和家亲版 保存sd卡的文件怎么打开?视频怎么播放?
    • ¥15 Python的Py-QT扩展库开发GUI
    • ¥60 提问一下周期性信信号的问题
    • ¥15 jtag连接不上fpga怎么办