2013-02-03 46 views
-1

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

  1. 我应该假设随机分配OS完全空任务 处理器线程,跑比其他线程快两倍?

  2. 我怎么能说出不同?六百分之二十四运行:相对平均时间

    • 首先节点一半时间

奔跑的下方。

  • 第二个节点:50/600运行。
  • 节点没有任何其他进程在运行。

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

    这里是一个横轴的节点运行数,而时间以秒为单位。接过运行

    Time to get the process to end

    (平均87.13)

    另一个节点上第二测试跑如下:

    Second node test

    (平均= 85.5)

    一点点相对平均速度较慢,但​​随机时间更长,平均性能更好。

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

    +1

    看起来像一些争用问题。就好像大多数工作项目等待大部分时间,但有时他们可以很快进入。 – usr

    +0

    我认为网络繁忙是一个问题,但它是一个私有局域网,没有硬核服务运行,只有主节点有RDP,MYSQL,WEB服务,但该图只针对工作节点。由于该文件在大约6秒内被读取,所以服务器发送的唯一东西是该文件(仅用于该目的,该文件不会随时被修改)。每一次,我都认为这是延迟使用资源。 –

    回答

    0

    我不能告诉,如果它真的是一个竞争的问题,像USR答案,但它是在写应答文件,我用的是字符串缓冲区太慢进行数据AQUISITION,我改变来自:

    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秒(平均)

    +0

    有争论的perfmon计数器。运行两个版本一小时并收集数据并查看自己。少想多按钮压 –