C# DirectoryInfo GetFiles函数调用之后内存居高不下

用C#ConsoleApplication写了个函数就只有下面两行代码文件和目录总数比较大25万件左右执行完之后内存一直居高不下。就高手解答。在线等。。。Director... 用C# ConsoleApplication写了个函数就只有下面两行代码 文件和目录总数比较大25万件左右
执行完之后内存一直居高不下。就高手解答。在线等。。。

DirectoryInfo currentFolder = new DirectoryInfo("E:\\File(25万)");
FileInfo[] lstFolderFiles = currentFolder.GetFiles("*.xml", SearchOption.AllDirectories);
展开
 我来答
Ben
2013-09-05 · 知道合伙人软件行家
Ben
知道合伙人软件行家
采纳数:860 获赞数:2875
认真回答者.

向TA提问 私信TA
展开全部
DirectoryInfo currentFolder = new DirectoryInfo("E:\\File(25万)");
FileInfo[] lstFolderFiles = currentFolder.GetFiles("*.xml", SearchOption.AllDirectories);
....
您是想搜索所有XML啊....
那就最好别全用C#的封装代码
如果要用.....
使用CMD命令加/P制作
过程很复杂..要听么?
好吧我还是给你说吧

25W
很大的数字哦

CMD 的DIR命令允许/P作为一屏显示,调用CMD并且获取其具体内容进行字符串解析即可..

private void ExecuteCmd(string command)
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";

p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;

p.Start();
p.StandardInput.WriteLine("DIR /P");

p.StandardInput.WriteLine("exit");
p.WaitForExit();//这里是关闭,记得删掉,不然你就只能获取第一屏了
this.textBox1.Text=textBox1.Text+ p.StandardOutput.ReadToEnd();
p.Close();//这个也不要撒.....
}

这是一个最基本的...
然后p.StandardOutput.ReadToEnd();
这个就是读出来的内容
你解析后.
给CMD输入ENTER.然后再获取.做一个循环即可
你试试吧
手敲的代码.不知道好不好用..保重..学长只能帮你到这里了...
llyn23
2013-09-05 · TA获得超过5142个赞
知道大有可为答主
回答量:1831
采纳率:50%
帮助的人:1845万
展开全部

GetFiles就是获得目录下[默然不包括子文件夹中的]的文件,你加了SearchOption.AllDirectories
就搜索包括子文件夹中的,文件并不会读取到内存中,但是:


  1. 因为你的文件和目录很多,这样一次搜索会消耗大量的CPU和一些内存

  2. FileInfo[]中的每一个元素都是一个FileInfo类的实例,那么实际就是new出来的,而new就是开创建对象分配空间,也就是每找到一个*.xml文件就会在内存中开辟空间,这会消耗大量的内存空间

更多追问追答
追问
理论上讲C#的GC不是应该自动回收资源的吗?
事实上我加了下面2句代码也是没有释放啊
currentFolder = null;
lstFolderFiles = null;
追答
GC会自动回收资源,但是具体什么时候回收程序员是不能决定的,也就是说你设置lstFolderFile=null只是标记lstFolderFiles 已经可以被回收了,但是到底什么时候回收你是无法确定的。你说的GC.Collect;实际也只是给GC一个提示,告诉GC可以做资源回收了,到底做了没有不知道
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yinhelan
2013-09-05 · 超过11用户采纳过TA的回答
知道答主
回答量:68
采纳率:100%
帮助的人:30.1万
展开全部
当然居高不下了额。。。。全部读取读取到内存中了=。= 能下来才怪呢!
更多追问追答
追问
理论上讲C#的GC不是应该自动回收资源的吗?
事实上我加了下面2句代码也是没有释放啊
currentFolder = null;
lstFolderFiles = null;

而且手动去让GC回收貌似也是不行
GC.Collect;
GC.WaitForPendingFinalizers();
追答
这个只是代表手动强制收回吧,但是并没有明确回收时间
Dispose() clear() 这些命令可以么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式