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
- sitestring.cs
- ExpressionParser.cs
- ControlsConfig.cs
- diagnosticsswitches.cs
- Inline.cs
- ScriptRegistrationManager.cs
- ArrayList.cs
- ActiveXHelper.cs
- Floater.cs
- XmlAttribute.cs
- EnumConverter.cs
- HtmlElementCollection.cs
- RSAPKCS1KeyExchangeFormatter.cs
- DLinqTableProvider.cs
- NativeMethodsCLR.cs
- CodeSubDirectoriesCollection.cs
- KnownTypesHelper.cs
- BitmapMetadataBlob.cs
- ImageList.cs
- EnumValidator.cs
- EmptyEnumerable.cs
- TransactionCache.cs
- XComponentModel.cs
- WebPartMenu.cs
- XPathSelectionIterator.cs
- TableLayoutStyle.cs
- ForwardPositionQuery.cs
- FilterException.cs
- DataTableTypeConverter.cs
- DataTemplateKey.cs
- CodeSnippetExpression.cs
- GridViewRow.cs
- HostingEnvironmentSection.cs
- ProfilePropertyNameValidator.cs
- XmlNamedNodeMap.cs
- TypedRowHandler.cs
- ContentDisposition.cs
- AttachedAnnotationChangedEventArgs.cs
- AlternateView.cs
- QueueProcessor.cs
- ViewEvent.cs
- HTMLTagNameToTypeMapper.cs
- CSharpCodeProvider.cs
- UniqueEventHelper.cs
- GiveFeedbackEventArgs.cs
- ConfigXmlDocument.cs
- SymbolMethod.cs
- GlyphsSerializer.cs
- ShaderRenderModeValidation.cs
- TemplateBindingExpressionConverter.cs
- ByteRangeDownloader.cs
- ChineseLunisolarCalendar.cs
- SignedInfo.cs
- Dictionary.cs
- FieldToken.cs
- ProtocolState.cs
- FixedSOMTableCell.cs
- Size.cs
- DynamicMethod.cs
- GenericPrincipal.cs
- DesignerGenericWebPart.cs
- XmlElementList.cs
- DataRow.cs
- TiffBitmapDecoder.cs
- XmlSchemaAny.cs
- DataSourceConverter.cs
- DataBoundControlHelper.cs
- ISFClipboardData.cs
- UIEndRequest.cs
- WebPartZoneBaseDesigner.cs
- NamedPipeAppDomainProtocolHandler.cs
- CustomBinding.cs
- SelectionEditor.cs
- _NegoStream.cs
- KeyEvent.cs
- SerializerWriterEventHandlers.cs
- OracleException.cs
- ExtensionQuery.cs
- ColorAnimation.cs
- PolyQuadraticBezierSegment.cs
- TypeUsage.cs
- ConfigXmlCDataSection.cs
- Nodes.cs
- SymbolTable.cs
- DateTimeParse.cs
- DispatcherSynchronizationContext.cs
- FilterEventArgs.cs
- AssemblyBuilderData.cs
- Single.cs
- CTreeGenerator.cs
- MimeMultiPart.cs
- ProtocolsSection.cs
- CollectionDataContractAttribute.cs
- EllipticalNodeOperations.cs
- CapabilitiesState.cs
- XPathNodeList.cs
- CorrelationExtension.cs
- SqlException.cs
- Size3D.cs
- TemplateColumn.cs