小编JRa*_*ats的帖子

通过网络验证3.5亿个文件的存在

我有一个SQL Server表,大约有300,000,000个绝对UNC路径,我正在尝试(快速)验证每个路径,以确保SQL Server表中的路径实际上作为磁盘上的文件存在.

从表面上来看,我正在以50,000个批量查询表格,然后递增一个计数器来推进我的批次.

然后,我使用数据读取器对象来存储我当前的批处理集并循环遍历批处理,使用File.Exists(path)命令检查每个文件,如下例所示.

问题是,我正在处理大约.四核心3.4ghz i5最大每秒1000个文件,16GB内存,这需要几天时间.有更快的方法吗?

我在SQL Server表上有一个列存储索引,我已对它进行了分析.我在<1s中获得了50k的批量记录,因此在向.net控制台应用程序发布批次时,这不是SQL瓶颈.

while (counter <= MaxRowNum)
{
    command.CommandText = "SELECT id, dbname, location FROM table where ID BETWEEN " + counter + " AND " + (counter+50000).ToString();

    connection.Open();

    using (var reader = command.ExecuteReader())
    {
        var indexOfColumn1 = reader.GetOrdinal("ID");
        var indexOfColumn2 = reader.GetOrdinal("dbname");
        var indexOfColumn3 = reader.GetOrdinal("location");

        while (reader.Read())
        {
            var ID = reader.GetValue(indexOfColumn1);
            var DBName = reader.GetValue(indexOfColumn2);
            var Location = reader.GetValue(indexOfColumn3);

            if (!File.Exists(@Location.ToString()))
            {
                //log entry to logging table
            }
        } …
Run Code Online (Sandbox Code Playgroud)

.net c# t-sql sql-server

25
推荐指数
2
解决办法
1232
查看次数

标签 统计

.net ×1

c# ×1

sql-server ×1

t-sql ×1