zoukankan      html  css  js  c++  java
  • 生成1000000个以上ip

    C

    #include <stdio.h>
    int main(void)
    {
            FILE *fptr = fopen("ip.txt", "w");
            for(int k=1; k<255; k++){
                    for(int j=1; j<255; j++){
                            for(int i=1; i<255; i++){
                                    fprintf(fptr, "192.%d.%d.%d
    ", k, j, i);
                            }
                    }
            }
            fclose(fptr);
            return 0;
    }
    

    Python

    # Generate more than 1,000,000 ip
    f = open("ip.txt", "wt")
    for k in range(1, 255):
        for j in range(1, 255):
            for i in range(1, 255):
                f.write("192.{}.{}.{}
    ".format(k, j, i))
    f.close()
    

    速度

    • C 6.93 秒(测试三次(都是删除了原有的ip.txt)速度分别为6.91秒, 7.28秒, 6.60秒 平均为 6.93秒)
    • Python 14.82 秒((测试三次(都是删除了原有的ip.txt)速度分别为14.63秒, 15.00秒, 14.84秒 平均为 14.82秒))

    扩展,时间的花费探究

    1. 对C语言程序进行优化,先写入大块缓存,再写入文件.
    #include <stdio.h>
    #include <string.h>
    
    #define BUF_SIZE 254*254*16
    
    int main(void)
    {
            char file_buffer[BUF_SIZE+64] = {0}; // 1 MB buffer, plus enough
            int buffer_count = 0;
    
            FILE *fptr = fopen("ip2.txt", "w");
            for(int k=1; k<255; k++){
                    for(int j=1; j<255; j++){
                            for(int i=1; i<255; i++){
                                    buffer_count += sprintf(&file_buffer[buffer_count], "192.%d.%d.%d
    ", k, j, i);
                                    continue;
                            }
                    }
                    fwrite(file_buffer, 1, buffer_count, fptr);
                    buffer_count = 0;
            }
            fclose(fptr);
            return 0;
    }
    

    三次测试如下:

    └─$ time ./1000000ip2                                                                            1 ⨯
    real    5.62s
    user    5.28s
    sys     0.22s
    cpu     97%
    
    
    └─$ time ./1000000ip2
    real    5.36s
    user    5.11s
    sys     0.16s
    cpu     98%
    
    
    └─$ time ./1000000ip2
    real    5.78s
    user    5.52s
    sys     0.15s
    cpu     98%
    

    优化后平均时间为 5.8666 秒,比没优化前只快了一秒钟左右。

    2.测试只写入大块缓存,不写入文件.

    #include <stdio.h>
    #include <string.h>
    
    #define BUF_SIZE 254*254*16
    
    int main(void)
    {
            char file_buffer[BUF_SIZE+64] = {0}; // 1 MB buffer, plus enough
            int buffer_count = 0;
    
            FILE *fptr = fopen("ip2.txt", "w");
            for(int k=1; k<255; k++){
                    for(int j=1; j<255; j++){
                            for(int i=1; i<255; i++){
                                    buffer_count += sprintf(&file_buffer[buffer_count], "192.%d.%d.%d
    ", k, j, i);
                                    continue;
                            }
                    }
                    //fwrite(file_buffer, 1, buffer_count, fptr);
                    buffer_count = 0;
            }
            fclose(fptr);
            return 0;
    }
    

    测试三次时间如下:

    └─$ time ./1000000ip2             
    real    5.20s
    user    5.13s
    sys     0.01s
    cpu     98%
    
    └─$ time ./1000000ip2
    real    5.11s
    user    5.07s
    sys     0.00s
    cpu     99%
    
    └─$ time ./1000000ip2
    real    5.12s
    user    5.09s
    sys     0.00s
    cpu     99%
    

    只写入大块缓存,不写入文件的,平均时间为 5.14 秒;只比写入文件快了 0.7秒左右。

    3.这次测试, 连大缓存都不写入的时间

    #include <stdio.h>
    #include <string.h>
    
    #define BUF_SIZE 254*254*16
    
    int main(void)
    {
            char file_buffer[BUF_SIZE+64] = {0}; // 1 MB buffer, plus enough
            int buffer_count = 0;
    
            FILE *fptr = fopen("ip2.txt", "w");
            for(int k=1; k<255; k++){
                    for(int j=1; j<255; j++){
                            for(int i=1; i<255; i++){
                                    //buffer_count += sprintf(&file_buffer[buffer_count], "192.%d.%d.%d
    ", k, j, i);
                                    continue;
                            }
                    }
                    //fwrite(file_buffer, 1, buffer_count, fptr);
                    buffer_count = 0;
            }
            fclose(fptr);
            return 0;
    }
    

    三次测试数据如下:

    └─$ time ./1000000ip2
    real    0.03s
    user    0.03s
    sys     0.00s
    cpu     86%
    
    └─$ time ./1000000ip2
    real    0.03s
    user    0.03s
    sys     0.00s
    cpu     86%
    
    └─$ time ./1000000ip2
    real    0.03s
    user    0.03s
    sys     0.00s
    cpu     83%
    

    平均时间为 0.03 秒.

    结论:写入数据很花时间,无论是对缓存的写入还是对文件的写入都很花时间;所以,能不写数据就不写数据。

  • 相关阅读:
    jQuery 语法
    jQuery 简介
    把数据存储到 XML 文件
    XML 注意事项
    XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。
    通过 PHP 生成 XML
    XML 命名空间(XML Namespaces)
    XML to HTML
    XMLHttpRequest 对象
    使用 XSLT 显示 XML
  • 原文地址:https://www.cnblogs.com/freedom-try/p/15292975.html
Copyright © 2011-2022 走看看