性能平均数据集

时间:2013-02-03 06:35:31

标签: c# windows multithreading performance

我有一个守护程序,它从31个EEG通道获取一个包含X量数据的文件,每2分钟从服务器获取一个文件,在开始获取文件时写入MySQL数据库,以及将平均数据写入磁盘,我发现Y时间看起来像处理文件的平均时间,我遇到的问题是,有些运行,时间低于一半时间 D:和结果是相同的...进程在线程中运行,所以,我的问题是:

  1. 我应该假设随机操作系统分配了一个完整的空任务 处理器到那个线程,运行速度是其他线程的两倍?

  2. 我怎么能分辨出来呢?

  3. 运行相对平均时间的一半时间

    • 第一个节点:24/600运行。
    • 第二个节点:50/600次运行。

    节点没有运行任何其他进程。

    试图在进程本身之间强制垃圾收集器释放内存,结果相同。

    这是水平轴上的一个节点运行编号,以秒为单位的时间。跑了

    Time to get the process to end

    (平均87.13)

    另一个节点上的第二次测试运行如下:

    Second node test

    (平均值= 85.5)

    相对平均值略慢一点,但随机时间更长,平均表现更好。

    如果你发誓至少发表评论为什么不是一个有效的问题,所以我不会再问这样的事情¬_¬

1 个答案:

答案 0 :(得分:0)

我无法判断它是否真的是一个争用问题,比如usr的答案,但它正在编写答案文件,我使用的字符串缓冲区太慢而无法执行数据采集,我改为:

    System.IO.StreamWriter sfile =   new System.IO.StreamWriter(path+file);
    for (int x = 0; x != chans; x++){
       for (int xx = 0; xx != maxsize; xx++){
           sql += data[x, xx] + "," + xx.ToString() + "," + tes + "," + x.ToString()+"\n";
       }
       sfile.Write(sql);
       sql = "";
     }

要:

    System.IO.StreamWriter sfile =   new System.IO.StreamWriter(path+file);
    for (int x = 0; x != chans; x++){
       for (int xx = 0; xx != maxsize; xx++){
           sfile.Write(data[x, xx] + "," + xx.ToString() + "," + tes + "," + x.ToString()+"\n");
       }
     }

看起来缓冲区不是一个很好的选择...现在所有测试都在* 强文本 * 16秒左右运行。而不是35(非常幸运的状态)到92秒(平均值)