Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / SqlClient / SqlUdtInfo.cs / 1305376 / SqlUdtInfo.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All Rights Reserved.
// Information Contained Herein is Proprietary and Confidential.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.SqlClient {
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Diagnostics;
using System.Text;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection.Emit;
using System.Security.Permissions;
using Microsoft.SqlServer.Server;
internal class SqlUdtInfo {
internal readonly Microsoft.SqlServer.Server.Format SerializationFormat;
internal readonly bool IsByteOrdered;
internal readonly bool IsFixedLength;
internal readonly int MaxByteSize;
internal readonly string Name;
internal readonly string ValidationMethodName;
private SqlUdtInfo(Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute attr) {
SerializationFormat = (Microsoft.SqlServer.Server.Format)attr.Format;
IsByteOrdered = attr.IsByteOrdered;
IsFixedLength = attr.IsFixedLength;
MaxByteSize = attr.MaxByteSize;
Name = attr.Name;
ValidationMethodName= attr.ValidationMethodName;
}
internal static SqlUdtInfo GetFromType(Type target) {
SqlUdtInfo udtAttr = TryGetFromType(target);
if (udtAttr == null) {
throw InvalidUdtException.Create(target, Res.SqlUdtReason_NoUdtAttribute);
}
return udtAttr;
}
// VSTFDEVDIV 479671: Type.GetCustomAttributes is an time-expensive call.
// Improve UDT serialization performance by caching the resulted UDT type information using type-safe dictionary.
// Use a per-thread cache, so we do not need to synchronize access to it
[ThreadStatic]
private static Dictionary m_types2UdtInfo;
internal static SqlUdtInfo TryGetFromType(Type target) {
if (m_types2UdtInfo == null)
m_types2UdtInfo = new Dictionary();
SqlUdtInfo udtAttr = null;
if (!m_types2UdtInfo.TryGetValue(target, out udtAttr)) {
// query SqlUserDefinedTypeAttribute first time and cache the result
object[] attr = target.GetCustomAttributes(typeof(Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute), false);
if (attr != null && attr.Length == 1) {
udtAttr = new SqlUdtInfo((Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute)attr[0]);
}
m_types2UdtInfo.Add(target, udtAttr);
}
return udtAttr;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All Rights Reserved.
// Information Contained Herein is Proprietary and Confidential.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.SqlClient {
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Diagnostics;
using System.Text;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection.Emit;
using System.Security.Permissions;
using Microsoft.SqlServer.Server;
internal class SqlUdtInfo {
internal readonly Microsoft.SqlServer.Server.Format SerializationFormat;
internal readonly bool IsByteOrdered;
internal readonly bool IsFixedLength;
internal readonly int MaxByteSize;
internal readonly string Name;
internal readonly string ValidationMethodName;
private SqlUdtInfo(Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute attr) {
SerializationFormat = (Microsoft.SqlServer.Server.Format)attr.Format;
IsByteOrdered = attr.IsByteOrdered;
IsFixedLength = attr.IsFixedLength;
MaxByteSize = attr.MaxByteSize;
Name = attr.Name;
ValidationMethodName= attr.ValidationMethodName;
}
internal static SqlUdtInfo GetFromType(Type target) {
SqlUdtInfo udtAttr = TryGetFromType(target);
if (udtAttr == null) {
throw InvalidUdtException.Create(target, Res.SqlUdtReason_NoUdtAttribute);
}
return udtAttr;
}
// VSTFDEVDIV 479671: Type.GetCustomAttributes is an time-expensive call.
// Improve UDT serialization performance by caching the resulted UDT type information using type-safe dictionary.
// Use a per-thread cache, so we do not need to synchronize access to it
[ThreadStatic]
private static Dictionary m_types2UdtInfo;
internal static SqlUdtInfo TryGetFromType(Type target) {
if (m_types2UdtInfo == null)
m_types2UdtInfo = new Dictionary();
SqlUdtInfo udtAttr = null;
if (!m_types2UdtInfo.TryGetValue(target, out udtAttr)) {
// query SqlUserDefinedTypeAttribute first time and cache the result
object[] attr = target.GetCustomAttributes(typeof(Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute), false);
if (attr != null && attr.Length == 1) {
udtAttr = new SqlUdtInfo((Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute)attr[0]);
}
m_types2UdtInfo.Add(target, udtAttr);
}
return udtAttr;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodeTryCatchFinallyStatement.cs
- CodeStatement.cs
- BindingWorker.cs
- VersionPair.cs
- Transform3D.cs
- AuthStoreRoleProvider.cs
- OdbcPermission.cs
- XPathSelectionIterator.cs
- CaretElement.cs
- WeakEventManager.cs
- XPathChildIterator.cs
- SettingsPropertyCollection.cs
- JapaneseCalendar.cs
- SqlFormatter.cs
- EdmSchemaError.cs
- ExpressionCopier.cs
- RichTextBox.cs
- TransformGroup.cs
- GeometryGroup.cs
- RadioButtonAutomationPeer.cs
- securitymgrsite.cs
- HtmlInputText.cs
- EntityDataSourceDataSelectionPanel.cs
- UDPClient.cs
- Stopwatch.cs
- XmlDataSource.cs
- DoubleCollectionValueSerializer.cs
- XPSSignatureDefinition.cs
- PreProcessor.cs
- SapiRecoContext.cs
- WebPartConnectionsConfigureVerb.cs
- NavigateEvent.cs
- AssemblySettingAttributes.cs
- XmlSchemaObjectCollection.cs
- DataGridViewDataConnection.cs
- OracleSqlParser.cs
- DataTemplateSelector.cs
- FileNotFoundException.cs
- DataGridrowEditEndingEventArgs.cs
- UnsafeNetInfoNativeMethods.cs
- PrintDialogException.cs
- ListViewSelectEventArgs.cs
- CachingHintValidation.cs
- Object.cs
- WebPartConnectionsDisconnectVerb.cs
- SafeNativeMethods.cs
- FormViewInsertedEventArgs.cs
- TemplateControl.cs
- WorkflowApplicationUnhandledExceptionEventArgs.cs
- PopupEventArgs.cs
- HttpCapabilitiesBase.cs
- IdentityModelDictionary.cs
- DefaultIfEmptyQueryOperator.cs
- ConnectionPoolManager.cs
- HtmlForm.cs
- RelationshipEndMember.cs
- AxHostDesigner.cs
- CollectionContainer.cs
- HorizontalAlignConverter.cs
- DoubleLink.cs
- ContextDataSource.cs
- Point4D.cs
- NameTable.cs
- BuildManager.cs
- WebBrowsableAttribute.cs
- EntityDataSourceSelectedEventArgs.cs
- SR.cs
- RefreshPropertiesAttribute.cs
- FactoryGenerator.cs
- StatusBar.cs
- ListViewItem.cs
- SmtpTransport.cs
- XmlTypeMapping.cs
- QilChoice.cs
- AssociationEndMember.cs
- ChineseLunisolarCalendar.cs
- SelectorItemAutomationPeer.cs
- DataGridViewCellMouseEventArgs.cs
- TabControl.cs
- WbemProvider.cs
- ValueCollectionParameterReader.cs
- TypeGeneratedEventArgs.cs
- WindowsFont.cs
- Pair.cs
- PeerChannelFactory.cs
- SettingsPropertyIsReadOnlyException.cs
- AccessibleObject.cs
- ALinqExpressionVisitor.cs
- ProfileManager.cs
- FixedPosition.cs
- BevelBitmapEffect.cs
- SortFieldComparer.cs
- TrackBarRenderer.cs
- SourceChangedEventArgs.cs
- RolePrincipal.cs
- MultilineStringConverter.cs
- TextModifierScope.cs
- WriteTimeStream.cs
- WindowsAuthenticationEventArgs.cs
- DtrList.cs