对照实验(1)-批量清理系统临时文件

2/11/2016来源:PHP技巧人气:2316

语言之争由来已久,下面做一些IO实验(遍历9G多的文件,批量删除),尽量用事实来比较谁优谁劣。操作系统Win7 64 位,文件包大小:9.68G。

一、语言:C#

开发环境:vs 2013

代码总行数:43行

耗时:7秒

代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BatchDelete
{
    class PRogram
    {
        static void Main(string[] args)
        {
            // 输入目录 e:\tmp
            string path;
            Console.WriteLine("输入要清理的目录:");
            path = Console.ReadLine();
            // 开始计时
            Console.WriteLine("开始计时:"+DateTime.Now.ToString("HH:mm:ss"));
            // 先遍历匹配查找再循环删除
            if (Directory.Exists(path))
            {
                Console.Write("正在删除");
                foreach (string fileName in Directory.GetFileSystemEntries(path))
                {
                    if (File.Exists(fileName) && fileName.Contains("cachegrind.out"))
                    {
                        File.Delete(fileName);
                    }
                }
                Console.WriteLine("");
            }
            else
            {
                Console.WriteLine("该目录不存在!");
            }
            // 计时结束
            Console.WriteLine("结束计时:" + DateTime.Now.ToString("HH:mm:ss"));
            Console.ReadKey();
        }
    }
}

运行效果图:

 

二、语言:C/C++

开发环境:vs 2013

代码总行数:50行

耗时:36秒

代码:

#include <iostream>
#include <string>
#include <Windows.h>
#include <boost\filesystem\Operations.hpp>
#include <boost\filesystem\path.hpp>
#include <boost\filesystem\convenience.hpp>
#include <boost\algorithm\string.hpp>
using namespace std;

int main(int argc, char * argv[])
{
    // 输入目录 e:\tmp
    string strPath;
    cout << "输入要清理的目录:" << endl;
    getline(cin, strPath);
    // 开始计时    
    SYSTEMTIME sys_time;        //声明变量
    GetLocalTime(&sys_time);    //将变量值设置为本地时间
    printf("开始计时:%02d:%02d:%02d\n", sys_time.wHour,sys_time.wMinute,sys_time.wSecond);
    // 先遍历匹配查找再循环删除
    namespace fs = boost::filesystem;
    fs::path full_path(fs::initial_path());
    full_path = fs::system_complete(fs::path(strPath, fs::native));
    if (fs::exists(full_path))
    {
        cout << "正在删除" ;
        fs::directory_iterator item_begin(full_path);
        fs::directory_iterator item_end;
        for (; item_begin != item_end; item_begin++)
        {
            if (!fs::is_directory(*item_begin))
            {
                if (fs::exists(item_begin->path()) && boost::contains(item_begin->path().string(), "cachegrind.out"))
                {
                    fs::remove(item_begin->path());
                }
            }
        }
        cout << "" << endl;
    }
    else
    {
        cout << "该目录不存在!" << endl;
    }
    // 计时结束
    GetLocalTime(&sys_time);
    printf("计时结束:%02d:%02d:%02d\n", sys_time.wHour, sys_time.wMinute, sys_time.wSecond);
    system("pause");
    return 0;
}

运行效果图:

三、语言:php

开发环境:Phpstorm

代码总行数:32行

耗时:13秒

代码:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 16-1-29
 * Time: 上午9:31
 */
date_default_timezone_set('prc');
//输入目录 e:\tmp
$path = 'e:\tmp';
//开始计时
echo date("H:i:s",time()) . '<br/>';
//先遍历匹配查找再循环删除
if(is_dir($path))
{
    echo "正在删除";
    $mydir = dir($path);
    while($file = $mydir->read())
    {
        if(file_exists("$path/$file") && strpos($file, 'cachegrind.out') === 0)
        {
            unlink("$path/$file");
        }
    }
    echo '<br/>';
}
else
{
    echo "该目录不存在!" . '<br/>';
}
//计时结束
echo date("H:i:s",time()) . '<br/>';

运行效果图:

四、语言:java

开发环境:eclipse

代码总行数:43行

耗时:10秒

代码:

package com.yejing;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		// 输入目录 e:\tmp
		String path = null;
		System.out.println("输入要清理的目录:");
		path = s.next();
		// 开始计时
		Date nowTime=new Date(); 
		SimpleDateFormat time=new SimpleDateFormat("HH:mm:ss"); 
		System.out.println("开始计时:"+ time.format(nowTime)); 
		// 先遍历匹配查找再循环删除
		File dir = new File(path);
		if(dir.exists()){
			System.out.print("正在删除");
			File[] fs = dir.listFiles();
			for(int i=0;i<fs.length;i++){
				if(!fs[i].isDirectory()){
					if(fs[i].isFile() && fs[i].exists() && fs[i].getName().contains("cachegrind.out"))
					{
						fs[i].delete();  
					}
				}
			}
			System.out.println("");
		}else{
			System.out.println("该目录不存在!");
		}
		// 计时结束
		nowTime=new Date(); 
		System.out.println("开始计时:"+ time.format(nowTime)); 
	}

}

运行效果图:

五、语言:Python 3.3.5

开发环境:IDLE

代码总行数:20行

耗时:10秒

代码:

# -*- coding: utf-8 -*-  
import datetime
import os
 
# 输入目录 e:\tmp
path = input("输入要清理的目录:\n");
# 开始计时
print("开始计时:",datetime.datetime.now().strftime('%H:%M:%S'));
# 先遍历匹配查找再循环删除
if(os.path.exists(path)):
    print("正在删除");
    for parent,dirnames,filenames in os.walk(path):
        for filename in filenames:
            targetFile = os.path.join(parent,filename)
            if (os.path.isfile(targetFile) and "cachegrind.out" in targetFile):
                os.remove(targetFile)
else:
    print("该目录不存在!");
# 计时结束
print("结束计时:",datetime.datetime.now().strftime('%H:%M:%S'));

运行效果图: