private void ComputePlotAverage(out List <DateTime> timePoints, out List <double> retrieveMbPerSecond) { timePoints = new List <DateTime>(); retrieveMbPerSecond = new List <double>(); for (int i = 0; i < _component.PerformanceInfo.Count; ++i) { DateTime minStartTime = DateTime.MaxValue; DateTime maxEndTime = DateTime.MinValue; long totalBytes = 0; for (int j = 0; j < (int)_plotAverage.Value && i < _component.PerformanceInfo.Count; ++j, ++i) { StreamingPerformanceInfo performanceInfo = _component.PerformanceInfo[i]; totalBytes += performanceInfo.TotalBytesTransferred; if (performanceInfo.StartTime < minStartTime) { minStartTime = performanceInfo.StartTime; } if (performanceInfo.EndTime > maxEndTime) { maxEndTime = performanceInfo.EndTime; } } long averageTicks = minStartTime.Ticks + (maxEndTime.Ticks - minStartTime.Ticks) / 2; double timeSpanSeconds = maxEndTime.Subtract(minStartTime).TotalSeconds; double averageMbPerSecond = totalBytes / timeSpanSeconds / 1024 / 1024 * 8; timePoints.Add(new DateTime(averageTicks)); retrieveMbPerSecond.Add(averageMbPerSecond); } }
public void Retrieve() { if (!_alreadyRetrieved) { //construct this object before the lock so there's no chance of deadlocking //with the parent data source (because we are accessing it's tags at the //same time as it's trying to get the pixel data). FramePixelDataRetriever retriever = new FramePixelDataRetriever(this, Parent.binaryStream, Parent.useBulkLoading); lock (_syncLock) { if (!_alreadyRetrieved) { DateTime start = DateTime.Now; _retrieveResult = retriever.Retrieve(); DateTime end = DateTime.Now; _lastRetrievePerformanceInfo = new StreamingPerformanceInfo(start, end, _retrieveResult.MetaData.ContentLength); _alreadyRetrieved = true; } } } }
private void OnRetrievedFrame(object frameDataTransferInfo) { StreamingPerformanceInfo transferInfo = frameDataTransferInfo as StreamingPerformanceInfo; if (transferInfo != null) { _performanceInfo.Add(transferInfo); } NotifyPropertyChanged("NumberOfRetrieveItems"); NotifyPropertyChanged("NumberOfDecompressItems"); }
public void Retrieve() { if (!_alreadyRetrieved) { //construct this object before the lock so there's no chance of deadlocking //with the parent data source (because we are accessing it's tags at the //same time as it's trying to get the pixel data). FramePixelDataRetriever retriever = new FramePixelDataRetriever(this); lock (_syncLock) { if (!_alreadyRetrieved) { AbortAttemptIfNecessary(); try { ResetAttemptData(); _retrievesAttempted++; var start = DateTime.Now; _retrieveResult = retriever.Retrieve(); var end = DateTime.Now; _lastRetrievePerformanceInfo = new StreamingPerformanceInfo(start, end, _retrieveResult.MetaData.ContentLength); _alreadyRetrieved = true; } catch (Exception ex) { _lastError = ex; throw; } } } } }