-1

今のところ、私はX分を渡します。今のところはしません。残りについては、これが現在使用しているコードです。

私はこのようにしようとしました:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using DannyGeneral;
namespace CpuUsage
{
    public partial class Form1 : Form
    {
        private PerformanceCounter theCPUCounter;
        private PerformanceCounter theMemCounter;
        private PerformanceCounter specProcessCPUCounter;
        private float cpuUsage;
        private float memUsage;
        private string processname;
        private List<float> Values;
        public Form1()
        {
            InitializeComponent();
            Values = new List<float>();
                theCPUCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
                theMemCounter = new PerformanceCounter("Memory", "Available MBytes");
                specProcessCPUCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName);


        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            memUsage = theMemCounter.NextValue();
            label1.Text = memUsage.ToString();
            Logger.Write("Memory Usage   " + memUsage.ToString());
            cpuUsage = this.theCPUCounter.NextValue();
            label2.Text = cpuUsage.ToString();
            Logger.Write("Cpu Usage   " + this.cpuUsage.ToString());
            Values.Add(cpuUsage);
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

            float Maximum = Values.Max();
            float Minimum = Values.Min();
            float Average = Values.Average();
            string t = string.Format("{0}Maximum,{1}Minimum,{2}Average", Maximum, Minimum, Average);
            Logger.Write(t);
        }
    }
}

問題は、ロガー テキスト ファイルの結果が次のようになることです。

8/29/2012--1:57 AM ==> Memory Usage   2683
8/29/2012--1:57 AM ==> Cpu Usage   0
8/29/2012--1:57 AM ==> Memory Usage   2681
8/29/2012--1:57 AM ==> Cpu Usage   5.951914
8/29/2012--1:57 AM ==> Memory Usage   2675
8/29/2012--1:57 AM ==> Cpu Usage   1.15339
8/29/2012--1:57 AM ==> Memory Usage   2674
8/29/2012--1:57 AM ==> Cpu Usage   4.230328
8/29/2012--1:57 AM ==> Memory Usage   2674
8/29/2012--1:57 AM ==> Cpu Usage   1.345688
8/29/2012--1:57 AM ==> Memory Usage   2677
8/29/2012--1:57 AM ==> Cpu Usage   4.422635
8/29/2012--1:57 AM ==> Memory Usage   2676
8/29/2012--1:57 AM ==> Cpu Usage   0.768766
8/29/2012--1:57 AM ==> Memory Usage   2676
8/29/2012--1:57 AM ==> Cpu Usage   0.5764585
8/29/2012--1:57 AM ==> Memory Usage   2676
8/29/2012--1:57 AM ==> Cpu Usage   8.076494
8/29/2012--1:58 AM ==> 8.076494Maximum,0Minimum,2.947297Average

フォーマットの最後の行は、私が望んでいたものではありません。次のようなものにしたかった:最大 --- 8.076494 、最小 --- 0 、平均 --- 2.947297

しかし、今は最初に値を取得し、次にテキストを取得し、値と各テキストの間にスペースを入れません。

私の唯一の問題は、string.Formatの最後の行です

約5分ごとに合格します。今のところはしません。

4

2 に答える 2

2

1.) すべての中間値を保存する必要はないため、リストは多すぎます。
2.) はい、そうします。
3.) これを試してください:

public partial class Form1 : Form
{
    // ...
    private float minCpu;
    private float maxCpu;
    private float sumCpu;
    private int ticks;

    // also call this in constructor
    private void reset()
    {
       this.minCpu = Single.PositiveInfinity;
       this.maxCpu = Single.NegativeInfinity;
       this.sumCpu = 0;
       this.ticks  = 0;
    }

    // ...
    private void timer1_Tick(object sender, EventArgs e)
    {
        // ...
        // update
        if (this.minCpu > cpuUsage) this.minCpu = cpuUsage;
        if (this.maxCpu < cpuUsage) this.maxCpu = cpuUsage;
        this.sumCpu += cpuUsage;
        this.ticks++;

        if (this.ticks >= 5 * 60) // = 5 min, since this is called every second
        {
            float avgCpu = this.sumCpu / this.ticks;
            // write this.minCpu, this.maxCpu, and avgCpu to Log
            reset();
        }
    }

    // ...
}

4.) いいえ、ありません。上記を参照。

于 2012-08-28T22:43:11.653 に答える
0

唯一の問題は、文字列形式ですか??? わかりました、ここに行きます:

 string t = string.Format("Maximum --- {0} , Minimum --- {1} , Average --- {2}", Maximum, Minimum, Average);

正直なところ、どうやって残りを書いて、それを理解できなかったのかわかりません。少し寝ることをお勧めします。

于 2012-08-29T03:32:32.440 に答える