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
- PopupControlService.cs
- CachedTypeface.cs
- DataGridViewDataErrorEventArgs.cs
- ClientConfigPaths.cs
- VectorAnimationBase.cs
- Point3DValueSerializer.cs
- Root.cs
- ButtonFlatAdapter.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- QilStrConcat.cs
- DynamicFilterExpression.cs
- MimeTypePropertyAttribute.cs
- ZipIORawDataFileBlock.cs
- EditingCoordinator.cs
- Grid.cs
- Control.cs
- DataObjectMethodAttribute.cs
- Quaternion.cs
- AssemblyHash.cs
- HeaderedContentControl.cs
- WpfGeneratedKnownProperties.cs
- UserNamePasswordValidationMode.cs
- DbProviderConfigurationHandler.cs
- LayoutUtils.cs
- DrawListViewItemEventArgs.cs
- ByteAnimationUsingKeyFrames.cs
- Profiler.cs
- AnimationLayer.cs
- _FtpControlStream.cs
- ScrollItemProviderWrapper.cs
- PublisherMembershipCondition.cs
- Maps.cs
- RepeaterCommandEventArgs.cs
- ProcessModelInfo.cs
- ActivationServices.cs
- RegexReplacement.cs
- OdbcError.cs
- ExpandCollapsePattern.cs
- UserControl.cs
- Int32Converter.cs
- XsltContext.cs
- RequestCachePolicyConverter.cs
- xamlnodes.cs
- ThreadAbortException.cs
- PackageRelationship.cs
- SiteIdentityPermission.cs
- DeclarativeConditionsCollection.cs
- SqlUtil.cs
- OneOfScalarConst.cs
- FillErrorEventArgs.cs
- TdsEnums.cs
- XmlLoader.cs
- EncoderParameter.cs
- Ipv6Element.cs
- DBCommandBuilder.cs
- RegisteredExpandoAttribute.cs
- OleDbConnectionFactory.cs
- DeobfuscatingStream.cs
- CriticalExceptions.cs
- DateTimeAutomationPeer.cs
- CompilerScopeManager.cs
- LocationSectionRecord.cs
- SamlAudienceRestrictionCondition.cs
- IntPtr.cs
- StoryFragments.cs
- EventWaitHandleSecurity.cs
- InkCanvasFeedbackAdorner.cs
- X509ClientCertificateAuthentication.cs
- EntityConnection.cs
- DeferrableContent.cs
- BitmapFrame.cs
- UInt64Storage.cs
- UITypeEditors.cs
- MarkupWriter.cs
- TextServicesHost.cs
- DetailsViewDeleteEventArgs.cs
- GlyphRun.cs
- FormsAuthenticationModule.cs
- AppSettingsReader.cs
- DesignerView.xaml.cs
- ipaddressinformationcollection.cs
- translator.cs
- CharacterShapingProperties.cs
- DataRecordObjectView.cs
- FragmentQuery.cs
- SmiConnection.cs
- ClientSettings.cs
- QilList.cs
- PrintDialog.cs
- SpeakProgressEventArgs.cs
- SQLResource.cs
- HttpRawResponse.cs
- Int32RectValueSerializer.cs
- LockCookie.cs
- ContractReference.cs
- XmlIlTypeHelper.cs
- ShaderEffect.cs
- ConfigXmlAttribute.cs
- Empty.cs
- dbdatarecord.cs