views:

93

answers:

3

I have defined a performance counter as:

PerformanceCounterCategory pcc = new PerformanceCounterCategory("Network Interface", ipAddress);
string instance = pcc.GetInstanceNames()[1]; //first card 

PerformanceCounter bandwidthCounter = new PerformanceCounter("Network Interface", "Current Bandwidth", instance, ipAddress);

in my code, but I want to define it global and use in different functions, so I changed the code to:

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();
                    }

                }               
            }
        }
    }
}

and then when I use bandwidthCounter I get this error:

Object reference not set to an instance of an object.

What is missing?

+2  A: 

You need to put the instance in a static field, and initialize it in the field initializer.

For example:

static PerformanceCounter bandwidthCounter 
  = new PerformanceCounter("Network Interface", "Current Bandwidth", instance, ipAddress);
SLaks
A: 

If you want to use it in other classes you can make class search static and all its fields static as well. Also you should instantiate your object "bandwidthCounter" beforer playing with it.

Alex Semenov
I have modified my post for you, about the instance defination, you can look again.
Rapunzo
bandwidthCounter is not initialised... just use the defualt constructor: PerformanceCounter bandwidthCounter = new PerformanceCounter();
Bogdan
A: 

I have solved my problem as use this declaration

public static PerformanceCounter bandwidthCounter;

and after use this format

bandwidthCounter = new PerformanceCounter("Network Interface", "Current Bandwidth", instance, ipAddress);

thanks to every answers

Rapunzo