我已經定義了一個性能計數器爲:C#定義問題
PerformanceCounterCategory pcc = new PerformanceCounterCategory("Network Interface", ipAddress);
string instance = pcc.GetInstanceNames()[1]; //first card
PerformanceCounter bandwidthCounter = new PerformanceCounter("Network Interface", "Current Bandwidth", instance, ipAddress);
在我的代碼
,但我想它定義全球和不同功能的使用,所以我改變了代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Collections;
using System.Diagnostics;
using System.Windows.Forms;
using System.Net.NetworkInformation;
using System.Management;
namespace networkPerformans
{
class Searcher
{
ConnectionClassOleDb cc = new ConnectionClassOleDb();
int threadNo, range, step, modJobs;
frmIpTarama frm;
ArrayList tmpList = new ArrayList();
DateTime endTime, startTime;
ListViewItem x;
long pingSuresi;
string machineName;
double utilization;
public Searcher(int threadNo, frmIpTarama frm)
{
this.threadNo = threadNo;
this.frm = frm;
}
public void getIpRange()
{
frm.calcIpAddressRange();
if (frm.calcIpAddressRange())
{
range = frm.intEndIp - frm.intStartIp + 1; // 13 - 1 = 12 + 1 = 13
step = range/(int)frm.nudThreads.Value; // 13/5 = 2
modJobs = (range % frm.threadSayac); // 13 mod 5 kalan= 3+
frm.lblGorev.Text = range.ToString();
if (threadNo <= modJobs)
{
step++;
}
int i = 0;
int currentIp;
while (i < step)
{
currentIp = (threadNo) + (frm.threadSayac * i) + frm.intStartIp;
string ipAddress = new IPAddress(BitConverter.GetBytes(IPAddress.NetworkToHostOrder(currentIp))).ToString();
if (currentIp <= frm.intEndIp)
{
getperformance(ipAddress, threadNo);
}
else
{
break;
}
i++;
}
}
}
public string pingStatus(string ip)
{
Ping p = new Ping();
PingReply reply = p.Send(ip);
pingSuresi = reply.RoundtripTime;
return reply.Status.ToString();
}
public void getperformance(string ipAddress, int threadNo)
{
string pingDurumu = pingStatus(ipAddress);
bool veriGoster = frm.cbVerileriGosterme.Checked;
if (pingDurumu == IPStatus.Success.ToString())
{
if (!veriGoster)
{
x = frm.lvAddresses.Items.Add(ipAddress);
x.SubItems.AddRange(new String[] { "", "", "", "", "", "", "", "", "" });
}
try
{
startTime = DateTime.Now;
PerformanceCounterCategory pcc = new PerformanceCounterCategory("Network Interface", ipAddress);
string instance = pcc.GetInstanceNames()[1]; // 1. network kartı
PerformanceCounter bandwidthCounter = new PerformanceCounter("Network Interface", "Current Bandwidth", instance, ipAddress);
PerformanceCounter pcReceived = new PerformanceCounter("Network Interface", "Bytes Received/sec", instance, ipAddress);
PerformanceCounter pcSent = new PerformanceCounter("Network Interface", "Bytes Sent/sec", instance, ipAddress);
PerformanceCounter pcProcessorTime = new PerformanceCounter("Processor", "% Processor Time", "_Total", ipAddress);
PerformanceCounter pcKullanilabilirRam = new PerformanceCounter("Memory", "Available MBytes", "", ipAddress);
const int numberOfIterations = 10;
float receiveSum = 0;
float sendSum = 0;
float cpuSum = 0;
float bandwidth = bandwidthCounter.NextValue();
for (int index = 0; index < numberOfIterations; index++)
{
sendSum += pcSent.NextValue();
receiveSum += pcReceived.NextValue();
cpuSum += pcProcessorTime.NextValue();
}
float dataSent = sendSum;
float dataReceived = receiveSum;
//MessageBox.Show(dataSent.ToString() +" "+ dataReceived.ToString());
if ((dataSent != 0) && (dataReceived != 0))
{
utilization = (8 * (dataSent + dataReceived))/(bandwidth * numberOfIterations) * 100;
}
else
{
string instance2 = pcc.GetInstanceNames()[0];
PerformanceCounter bandwidthCounter2 = new PerformanceCounter("Network Interface", "Current Bandwidth", instance2, ipAddress);
PerformanceCounter pcReceived2 = new PerformanceCounter("Network Interface", "Bytes Received/sec", instance2, ipAddress);
PerformanceCounter pcSent2 = new PerformanceCounter("Network Interface", "Bytes Sent/sec", instance2, ipAddress);
float bandwidth2 = bandwidthCounter2.NextValue();
for (int index = 0; index < numberOfIterations; index++)
{
sendSum += pcSent2.NextValue();
receiveSum += pcReceived2.NextValue();
cpuSum += pcProcessorTime.NextValue();
}
float dataSent2 = sendSum;
float dataReceived2 = receiveSum;
utilization = (8 * (dataSent2 + dataReceived2))/(bandwidth2 * numberOfIterations) * 100;
}
cpuSum = cpuSum/numberOfIterations;
IPHostEntry host = new IPHostEntry();
host = Dns.GetHostEntry(ipAddress);//ip Address is to be specified here
machineName = host.HostName;
endTime = DateTime.Now;
if (!frm.cbVerileriGosterme.Checked)
{
x.SubItems[1].Text = machineName;
x.SubItems[2].Text = threadNo.ToString();
x.SubItems[3].Text = pingDurumu;
x.SubItems[4].Text = pingSuresi.ToString();
x.SubItems[5].Text = (endTime - startTime).TotalSeconds.ToString();
x.SubItems[6].Text = utilization.ToString();
x.SubItems[7].Text = cpuSum.ToString();
x.SubItems[8].Text = pcKullanilabilirRam.NextValue().ToString();
x.SubItems[9].Text = "";
}
cc.sorgu = " EXECUTE [dbo].[prVeriKaydet] "
+ "'" + frm.taramaNo + "',"
+ "'" + ipAddress + "',"
+ "'" + machineName + "',"
+ pingSuresi.ToString().Replace(",", ".") + ","
+ (endTime - startTime).TotalSeconds.ToString().Replace(",", ".") + ","
+ utilization.ToString().Replace(",", ".") + ","
+ cpuSum.ToString().Replace(",", ".") + ","
+ pcKullanilabilirRam.NextValue().ToString().Replace(",", ".");
cc.Run(cc.sorgu, "");
}
catch (Exception ex)
{
endTime = DateTime.Now;
if (!veriGoster)
{
x.SubItems[2].Text = threadNo.ToString();
x.SubItems[3].Text = pingDurumu;
x.SubItems[4].Text = pingSuresi.ToString();
x.SubItems[5].Text = (endTime - startTime).TotalSeconds.ToString();
x.SubItems[5].Text = "0";
x.SubItems[6].Text = "0";
x.SubItems[7].Text = "0";
x.SubItems[8].Text = "0";
x.SubItems[9].Text = ex.Message;
}
}
}
lock (frm.progressBar1)
{
frm.progressBar1.Value++;
frm.lblIs.Text = frm.progressBar1.Value.ToString();
if (range - frm.nudThreads.Value < frm.progressBar1.Value)
{
frm.threadSayacKontrol--;
}
frm.tbThreadSayisi.Text = frm.threadSayacKontrol.ToString();
if (frm.progressBar1.Value == frm.progressBar1.Maximum)
{
frm.progressBar1.Value = 0;
frm.btnTara.Enabled = true;
frm.TheColumnSorter.CurrentColumn = 0;
frm.btnDurdurDevam.Enabled = false;
if (frm.cbSurekliTara.Checked)
{
frm.tara();
}
}
}
}
}
}
,然後當我使用bandwidthCounter
我得到這個錯誤:
Object reference not set to an instance of an object.
缺少什麼?
你'bandwidthCounter。*'代碼是住在後茫茫荒野。你可以更新你的問題,讓它住在一個真實的位置?此外,您還會顯示初始化「bandwidthCounter」的代碼,但再次不會顯示*代碼所在的位置。 – 2010-10-15 15:04:53
現在你是「getperformance」方法,它生活在無處不在的地步。由於我認爲這是執行問題的順序,所以這非常重要。那'bandwidthCounter = new PerformanceCounter(...)'代碼在哪裏呢? – 2010-10-15 15:11:08
我已經編輯了我的文章,我把類代碼al – Rapunzo 2010-10-16 07:58:43