Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / SqlClient / SqlStatistics.cs / 1305376 / SqlStatistics.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
using System;
using System.Collections;
using System.Data.Common;
using System.Diagnostics;
namespace System.Data.SqlClient
{
internal sealed class SqlStatistics {
static internal SqlStatistics StartTimer(SqlStatistics statistics) {
if ((null != statistics) && !statistics.RequestExecutionTimer()) {
// we're re-entrant -- don't bother.
statistics = null;
}
return statistics;
}
static internal void StopTimer(SqlStatistics statistics) {
if (null != statistics) {
statistics.ReleaseAndUpdateExecutionTimer();
}
}
// internal values that are not exposed through properties
internal long _closeTimestamp;
internal long _openTimestamp;
internal long _startExecutionTimestamp;
internal long _startFetchTimestamp;
internal long _startNetworkServerTimestamp;
// internal values that are exposed through properties
internal long _buffersReceived;
internal long _buffersSent;
internal long _bytesReceived;
internal long _bytesSent;
internal long _connectionTime;
internal long _cursorOpens;
internal long _executionTime;
internal long _iduCount;
internal long _iduRows;
internal long _networkServerTime;
internal long _preparedExecs;
internal long _prepares;
internal long _selectCount;
internal long _selectRows;
internal long _serverRoundtrips;
internal long _sumResultSets;
internal long _transactions;
internal long _unpreparedExecs;
// these flags are required if statistics is turned on/off in the middle of command execution
private bool _waitForDoneAfterRow;
private bool _waitForReply;
internal bool WaitForDoneAfterRow {
get {
return _waitForDoneAfterRow;
}
set {
_waitForDoneAfterRow = value;
}
}
internal bool WaitForReply {
get {
return _waitForReply;
}
}
internal SqlStatistics () {
}
internal void ContinueOnNewConnection() {
_startExecutionTimestamp = 0;
_startFetchTimestamp = 0;
_waitForDoneAfterRow = false;
_waitForReply = false;
}
internal IDictionary GetHashtable() {
Hashtable ht = new Hashtable();
ht.Add("BuffersReceived", _buffersReceived);
ht.Add("BuffersSent", _buffersSent);
ht.Add("BytesReceived", _bytesReceived);
ht.Add("BytesSent", _bytesSent);
ht.Add("CursorOpens", _cursorOpens);
ht.Add("IduCount", _iduCount);
ht.Add("IduRows", _iduRows);
ht.Add("PreparedExecs", _preparedExecs);
ht.Add("Prepares", _prepares);
ht.Add("SelectCount", _selectCount);
ht.Add("SelectRows", _selectRows);
ht.Add("ServerRoundtrips", _serverRoundtrips);
ht.Add("SumResultSets", _sumResultSets);
ht.Add("Transactions", _transactions);
ht.Add("UnpreparedExecs", _unpreparedExecs);
ht.Add ("ConnectionTime", ADP.TimerToMilliseconds(_connectionTime));
ht.Add ("ExecutionTime", ADP.TimerToMilliseconds(_executionTime));
ht.Add ("NetworkServerTime", ADP.TimerToMilliseconds(_networkServerTime));
return ht;
}
internal bool RequestExecutionTimer () {
if (_startExecutionTimestamp == 0) {
ADP.TimerCurrent(out _startExecutionTimestamp);
return true;
}
return false;
}
internal void RequestNetworkServerTimer () {
Debug.Assert(_startExecutionTimestamp!=0, "No network time expected outside execution period");
if (_startNetworkServerTimestamp == 0) {
ADP.TimerCurrent(out _startNetworkServerTimestamp);
}
_waitForReply = true;
}
internal void ReleaseAndUpdateExecutionTimer () {
long stopExecutionTimestamp;
if (_startExecutionTimestamp > 0) {
ADP.TimerCurrent(out stopExecutionTimestamp);
_executionTime += (stopExecutionTimestamp - _startExecutionTimestamp);
_startExecutionTimestamp = 0;
}
}
internal void ReleaseAndUpdateNetworkServerTimer () {
long stopNetworkServerTimestamp;
if (_waitForReply && _startNetworkServerTimestamp > 0) {
ADP.TimerCurrent(out stopNetworkServerTimestamp);
_networkServerTime += (stopNetworkServerTimestamp - _startNetworkServerTimestamp);
_startNetworkServerTimestamp = 0;
}
_waitForReply = false;
}
internal void Reset() {
_buffersReceived = 0;
_buffersSent = 0;
_bytesReceived = 0;
_bytesSent = 0;
_connectionTime = 0;
_cursorOpens = 0;
_executionTime = 0;
_iduCount = 0;
_iduRows = 0;
_networkServerTime = 0;
_preparedExecs = 0;
_prepares = 0;
_selectCount = 0;
_selectRows = 0;
_serverRoundtrips = 0;
_sumResultSets = 0;
_transactions = 0;
_unpreparedExecs = 0;
_waitForDoneAfterRow = false;
_waitForReply = false;
_startExecutionTimestamp = 0;
_startNetworkServerTimestamp = 0;
}
internal void SafeAdd (ref long value, long summand) {
if (long.MaxValue - value > summand) {
value += summand;
}
else {
value = long.MaxValue;
}
}
internal long SafeIncrement(ref long value) {
if (value < long.MaxValue) value++;
return value;
}
internal void UpdateStatistics() {
// update connection time
if (_closeTimestamp >= _openTimestamp) {
SafeAdd(ref _connectionTime, _closeTimestamp - _openTimestamp);
}
else {
_connectionTime = long.MaxValue;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SqlUserDefinedAggregateAttribute.cs
- ToolStripItemTextRenderEventArgs.cs
- CommunicationObjectFaultedException.cs
- WeakEventTable.cs
- ContractsBCL.cs
- ImageBrush.cs
- PartialTrustHelpers.cs
- DecoratedNameAttribute.cs
- HashCodeCombiner.cs
- DynamicResourceExtensionConverter.cs
- HttpListenerRequest.cs
- assertwrapper.cs
- LinqDataSourceDeleteEventArgs.cs
- ITextView.cs
- ExpressionHelper.cs
- X500Name.cs
- TableItemStyle.cs
- PerformanceCounterPermissionEntryCollection.cs
- InfoCardCryptoHelper.cs
- FormattedText.cs
- Tool.cs
- EntityDataSourceUtil.cs
- ValueChangedEventManager.cs
- ToolStripManager.cs
- RemoteWebConfigurationHostServer.cs
- ContentDefinition.cs
- ConfigurationSchemaErrors.cs
- CriticalFinalizerObject.cs
- MonitorWrapper.cs
- OutKeywords.cs
- SmtpFailedRecipientException.cs
- DesignerVerb.cs
- LockedBorderGlyph.cs
- FileReservationCollection.cs
- Container.cs
- AlternateViewCollection.cs
- ObjectContext.cs
- TextEffect.cs
- BooleanSwitch.cs
- DataGridViewRow.cs
- WindowsScrollBar.cs
- BitmapImage.cs
- BuildProvider.cs
- ExpressionVisitor.cs
- IteratorDescriptor.cs
- SourceLocation.cs
- TextProperties.cs
- QueryableDataSourceHelper.cs
- X509SubjectKeyIdentifierClause.cs
- ArcSegment.cs
- NumberFormatter.cs
- Dictionary.cs
- XhtmlBasicPanelAdapter.cs
- WebResponse.cs
- OdbcDataAdapter.cs
- DropTarget.cs
- PageSettings.cs
- HeaderPanel.cs
- SynchronousChannelMergeEnumerator.cs
- ModelFunction.cs
- PrintingPermissionAttribute.cs
- SchemaImporter.cs
- Fonts.cs
- SelectingProviderEventArgs.cs
- TextServicesCompartmentEventSink.cs
- CheckableControlBaseAdapter.cs
- InheritanceRules.cs
- PixelFormat.cs
- PeerCollaborationPermission.cs
- ModelUIElement3D.cs
- DbParameterHelper.cs
- Control.cs
- SQLInt32.cs
- OleDbReferenceCollection.cs
- WindowsFormsSynchronizationContext.cs
- SvcMapFileSerializer.cs
- TdsParserHelperClasses.cs
- OutputCacheSection.cs
- CircleHotSpot.cs
- XmlIlTypeHelper.cs
- Padding.cs
- PropertyMappingExceptionEventArgs.cs
- NetPeerTcpBindingElement.cs
- PathTooLongException.cs
- QueryAccessibilityHelpEvent.cs
- ToolStripRenderer.cs
- Cursor.cs
- CapabilitiesPattern.cs
- TypeUsage.cs
- GraphicsPathIterator.cs
- ChannelCredentials.cs
- RegexBoyerMoore.cs
- SqlDataSourceFilteringEventArgs.cs
- XmlEntity.cs
- NavigationWindow.cs
- FileVersion.cs
- ListViewAutomationPeer.cs
- ListBindableAttribute.cs
- PaintEvent.cs
- EventProvider.cs