/// <summary> /// Adds a result to the control. /// </summary> public void Add(PerformanceTestResult result) { if (result == null) throw new ArgumentNullException("result"); AddItem(result); AdjustColumns(); }
/// <see cref="BaseListCtrl.UpdateItem" /> protected override void UpdateItem(ListViewItem listItem, object item) { PerformanceTestResult result = item as PerformanceTestResult; if (result == null) { base.UpdateItem(listItem, item); return; } listItem.SubItems[0].Text = String.Format("{0}", result.Endpoint); listItem.SubItems[1].Text = String.Format("{0:0.##}", result.Results[1]); listItem.SubItems[2].Text = String.Format("{0:0.##}", result.Results[10]); listItem.SubItems[3].Text = String.Format("{0:0.##}", result.Results[50]); listItem.SubItems[4].Text = String.Format("{0:0.##}", result.Results[100]); listItem.SubItems[5].Text = String.Format("{0:0.##}", result.Results[250]); listItem.SubItems[6].Text = String.Format("{0:0.##}", result.Results[500]); //listItem.SubItems[7].Text = String.Format("{0:0.##}", result.Results[1000]); //listItem.SubItems[7].Text = String.Format("{0:0.##}", result.Results[2500]); //listItem.SubItems[8].Text = String.Format("{0:0.##}", result.Results[5000]); listItem.Tag = item; listItem.ImageKey = "DataType"; }
/// <summary> /// Runs the test in a background thread. /// </summary> private void DoTest(ConfiguredEndpoint endpoint) { PerformanceTestResult result = new PerformanceTestResult(endpoint, 100); result.Results.Add(1, -1); result.Results.Add(10, -1); result.Results.Add(50, -1); result.Results.Add(100, -1); result.Results.Add(250, -1); result.Results.Add(500, -1); try { // update the endpoint. if (endpoint.UpdateBeforeConnect) { BindingFactory bindingFactory = BindingFactory.Create(m_configuration, m_messageContext); endpoint.UpdateFromServer(bindingFactory); } SessionClient client = null; Uri url = new Uri(endpoint.Description.EndpointUrl); ITransportChannel channel = SessionChannel.Create( m_configuration, endpoint.Description, endpoint.Configuration, m_clientCertificate, m_messageContext); client = new SessionClient(channel); List <int> requestSizes = new List <int>(result.Results.Keys); for (int ii = 0; ii < requestSizes.Count; ii++) { // update the progress indicator. TestProgress((ii * 100) / requestSizes.Count); lock (m_lock) { if (!m_running) { break; } } int count = requestSizes[ii]; // initialize request. RequestHeader requestHeader = new RequestHeader(); requestHeader.ReturnDiagnostics = 5000; ReadValueIdCollection nodesToRead = new ReadValueIdCollection(count); for (int jj = 0; jj < count; jj++) { ReadValueId item = new ReadValueId(); item.NodeId = new NodeId((uint)jj, 1); item.AttributeId = Attributes.Value; nodesToRead.Add(item); } // ensure valid connection. DataValueCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; client.Read( requestHeader, 0, TimestampsToReturn.Both, nodesToRead, out results, out diagnosticInfos); if (results.Count != count) { throw new ServiceResultException(StatusCodes.BadUnknownResponse); } // do test. DateTime start = DateTime.UtcNow; for (int jj = 0; jj < result.Iterations; jj++) { client.Read( requestHeader, 0, TimestampsToReturn.Both, nodesToRead, out results, out diagnosticInfos); if (results.Count != count) { throw new ServiceResultException(StatusCodes.BadUnknownResponse); } } DateTime finish = DateTime.UtcNow; long totalTicks = finish.Ticks - start.Ticks; decimal averageMilliseconds = ((((decimal)totalTicks) / ((decimal)result.Iterations))) / ((decimal)TimeSpan.TicksPerMillisecond); result.Results[requestSizes[ii]] = (double)averageMilliseconds; } } finally { TestComplete(result); } }
/// <summary> /// Runs the test in a background thread. /// </summary> private void DoTest(ConfiguredEndpoint endpoint) { PerformanceTestResult result = new PerformanceTestResult(endpoint, 100); result.Results.Add(1, -1); result.Results.Add(10, -1); result.Results.Add(50, -1); result.Results.Add(100, -1); result.Results.Add(250, -1); result.Results.Add(500, -1); try { // update the endpoint. if (endpoint.UpdateBeforeConnect) { endpoint.UpdateFromServer(); } SessionClient client = null; Uri url = new Uri(endpoint.Description.EndpointUrl); ITransportChannel channel = SessionChannel.Create( m_configuration, endpoint.Description, endpoint.Configuration, m_clientCertificate, m_messageContext); client = new SessionClient(channel); List<int> requestSizes = new List<int>(result.Results.Keys); for (int ii = 0; ii < requestSizes.Count; ii++) { // update the progress indicator. TestProgress((ii * 100) / requestSizes.Count); lock (m_lock) { if (!m_running) { break; } } int count = requestSizes[ii]; // initialize request. RequestHeader requestHeader = new RequestHeader(); requestHeader.ReturnDiagnostics = 5000; ReadValueIdCollection nodesToRead = new ReadValueIdCollection(count); for (int jj = 0; jj < count; jj++) { ReadValueId item = new ReadValueId(); item.NodeId = new NodeId((uint)jj, 1); item.AttributeId = Attributes.Value; nodesToRead.Add(item); } // ensure valid connection. DataValueCollection results = null; DiagnosticInfoCollection diagnosticInfos = null; client.Read( requestHeader, 0, TimestampsToReturn.Both, nodesToRead, out results, out diagnosticInfos); if (results.Count != count) { throw new ServiceResultException(StatusCodes.BadUnknownResponse); } // do test. DateTime start = DateTime.UtcNow; for (int jj = 0; jj < result.Iterations; jj++) { client.Read( requestHeader, 0, TimestampsToReturn.Both, nodesToRead, out results, out diagnosticInfos); if (results.Count != count) { throw new ServiceResultException(StatusCodes.BadUnknownResponse); } } DateTime finish = DateTime.UtcNow; long totalTicks = finish.Ticks - start.Ticks; decimal averageMilliseconds = ((((decimal)totalTicks) / ((decimal)result.Iterations))) / ((decimal)TimeSpan.TicksPerMillisecond); result.Results[requestSizes[ii]] = (double)averageMilliseconds; } } finally { TestComplete(result); } }