2011-09-22 81 views
0

我有一个WCF服务的负载测试,我们正在尝试不同的压缩库和配置,我们需要测量测试期间发送的mb总数。是否有衡量相对交通公关的绩效指标?测试。如果是这样,我如何将它添加到我的负载测试中 - 似乎只有部分性能计数器可见 - 例如,在“Web服务”类别下,我没有在VS负载测试中看到性能计数器“收到总字节数”,但我可以在PerfMon中找到它。VS负载测试和'发送总字节'性能计数器?

感谢

+0

嗯,猜不多需要这些信息... – jaspernygaard

回答

2

在负载测试扩大计数器集>展开适用>右键点击计数器集>添加计数器

您可以实现自己的自定义性能计数器,像这样:

using System; 
using System.Diagnostics; 
using System.Net.NetworkInformation; 

namespace PerfCounter 
{ 
class PerfCounter 
{ 
    private const String categoryName = "Custom category"; 
    private const String counterName = "Total bytes received"; 
    private const String categoryHelp = "A category for custom performance counters"; 
    private const String counterHelp = "Total bytes received on network interface"; 
    private const String lanName = "Local Area Connection"; // change this to match your network connection 
    private const int sampleRateInMillis = 1000; 
    private const int numberofSamples = 200000; 

    private static NetworkInterface lan = null; 
    private static PerformanceCounter perfCounter; 
    private static long initialReceivedBytes; 

    static void Main(string[] args) 
    { 
     setupLAN(); 
     setupCategory(); 
     createCounters(); 
     updatePerfCounters(); 
    } 

    private static void setupCategory() 
    { 
     if (!PerformanceCounterCategory.Exists(categoryName)) 
     { 
      CounterCreationDataCollection counterCreationDataCollection = new CounterCreationDataCollection(); 
      CounterCreationData totalBytesReceived = new CounterCreationData(); 
      totalBytesReceived.CounterType = PerformanceCounterType.NumberOfItems64; 
      totalBytesReceived.CounterName = counterName; 
      counterCreationDataCollection.Add(totalBytesReceived); 
      PerformanceCounterCategory.Create(categoryName, categoryHelp, PerformanceCounterCategoryType.MultiInstance, counterCreationDataCollection); 
     } 
     else 
      Console.WriteLine("Category {0} exists", categoryName); 
    } 

    private static void createCounters() 
    { 
     perfCounter = new PerformanceCounter(categoryName, counterName, false); 
     perfCounter.RawValue = getTotalBytesReceived(); 
    } 

    private static long getTotalBytesReceived() 
    { 
     return lan.GetIPv4Statistics().BytesReceived; 
    } 

    private static void setupLAN() 
    { 
     NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); 
     foreach (NetworkInterface networkInterface in interfaces) 
     { 
      if (networkInterface.Name.Equals(lanName)) 
       lan = networkInterface; 
     } 
     initialReceivedBytes = lan.GetIPv4Statistics().BytesReceived; 
    } 

    private static void updatePerfCounters() 
    { 
     for (int i = 0; i < numberofSamples; i++) 
     { 
      perfCounter.RawValue = getTotalBytesReceived(); 
      Console.WriteLine("received: {0} bytes", perfCounter.RawValue - initialReceivedBytes); 
      System.Threading.Thread.Sleep(sampleRateInMillis); 
     } 
    } 
} 
}