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
- IArgumentProvider.cs
- HwndTarget.cs
- MyContact.cs
- SmtpClient.cs
- TemplateInstanceAttribute.cs
- Package.cs
- SyncMethodInvoker.cs
- ConfigurationValue.cs
- DataGridLinkButton.cs
- XPathScanner.cs
- PseudoWebRequest.cs
- PersistChildrenAttribute.cs
- UpDownBase.cs
- Funcletizer.cs
- PolyBezierSegmentFigureLogic.cs
- ElementNotAvailableException.cs
- ObjectStateEntry.cs
- NameTable.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- ChannelParameterCollection.cs
- InternalTypeHelper.cs
- SqlDataSourceCommandEventArgs.cs
- SHA512Managed.cs
- IntranetCredentialPolicy.cs
- SqlBulkCopy.cs
- RichTextBox.cs
- BinaryUtilClasses.cs
- DbConnectionFactory.cs
- TransactionTable.cs
- XmlUTF8TextReader.cs
- ObjectListShowCommandsEventArgs.cs
- WebConfigurationFileMap.cs
- RIPEMD160Managed.cs
- HttpContext.cs
- ReversePositionQuery.cs
- Debug.cs
- MarkupObject.cs
- ProcessStartInfo.cs
- MachineKeyConverter.cs
- MaterialCollection.cs
- DispatcherBuilder.cs
- InstalledFontCollection.cs
- VsPropertyGrid.cs
- OrthographicCamera.cs
- FacetEnabledSchemaElement.cs
- DataGridViewCellStateChangedEventArgs.cs
- SvcMapFileSerializer.cs
- LogicalTreeHelper.cs
- SerializationHelper.cs
- Int32KeyFrameCollection.cs
- DataKeyCollection.cs
- ZoneIdentityPermission.cs
- BaseContextMenu.cs
- Tuple.cs
- ToolStripContentPanelRenderEventArgs.cs
- SingleQueryOperator.cs
- CodeDomComponentSerializationService.cs
- ResourceDictionary.cs
- XamlStream.cs
- VersionedStream.cs
- SingleConverter.cs
- SdlChannelSink.cs
- EdmError.cs
- ParseHttpDate.cs
- SessionSymmetricTransportSecurityProtocolFactory.cs
- DeclarativeCatalogPart.cs
- TableCellCollection.cs
- OperandQuery.cs
- Restrictions.cs
- RadialGradientBrush.cs
- ServiceManager.cs
- ReadContentAsBinaryHelper.cs
- CodeSnippetCompileUnit.cs
- LowerCaseStringConverter.cs
- DataSourceCache.cs
- TimeZone.cs
- LambdaSerializationException.cs
- ConfigurationElement.cs
- PersonalizablePropertyEntry.cs
- DuplicateWaitObjectException.cs
- BevelBitmapEffect.cs
- ContentDisposition.cs
- HScrollBar.cs
- HttpServerVarsCollection.cs
- ECDiffieHellman.cs
- StateDesigner.Layouts.cs
- ClientCultureInfo.cs
- XmlEnumAttribute.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- UnsafeNativeMethodsTablet.cs
- DiscoveryClientChannelFactory.cs
- DataGridViewColumnHeaderCell.cs
- DesignTable.cs
- CreateUserErrorEventArgs.cs
- NativeMethods.cs
- DataTableMapping.cs
- CheckBoxStandardAdapter.cs
- WebRequest.cs
- OneToOneMappingSerializer.cs
- Queue.cs