Postsharpред рд╣рдо рдХреИрд╢рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ

рдХрднреА-рдХрднреА рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдмрд╛рд╣рд░реА рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд рдХреБрдЫ рд╕реЗрд╡рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЕрдзрд┐рдХ рднрд╛рд░ рджреЗрддрд╛ рд╣реИред рдпрд╛ рдпрд╣ рддреНрд╡рд░рд┐рдд рд╕рдВрдЪрд╛рд▓рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдСрдкрд░реЗрд╢рди рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рд╕рднреА рдкреНрд░рджрд░реНрд╢рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЪреВрд╕ рд╕рдХрддрд╛ рд╣реИред рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ PostSharp , рд╢реБрд░реВ рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдХреИрд╢рд┐рдВрдЧ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдердХрд╛рдК рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдкрд░рд┐рдорд╛рдг рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдЖрджреЗрд╢реЛрдВ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рд╕рднреА рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рд╕реЗрдЯ рдХрд░рдирд╛ред рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░рдЦрдХрд░ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдорд╛рди рд▓реАрдЬрд┐рдП рдореИрдВ рдХрд╛рд░ рдбреАрд▓рд░рд╢рд┐рдк рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдХрд╛рд░ рдбреАрд▓рд░рд╢рд┐рдк рдкрд░ рдмрд┐рдХреНрд░реА рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдХрд╛рд░реЗрдВ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реИрд▓реВрди рдХреА рдХреАрдордд рд╕реВрдЪреА рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧрд╛, рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореЗрдХ, рдореЙрдбрд▓ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд░реНрд╖ рдХреА рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдореВрд▓реНрдп рд╕реВрдЪреА (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ) рдХреЗ рдореВрд▓реНрдп рдмрд╣реБрдд рдмрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕ рдореВрд▓реНрдп рд╕реВрдЪреА рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП, рдЙрд╕реА рд╕рдордп, рд╡реЗрдм рд╕реЗрд╡рд╛ рдмрд╣реБрдд рдзреАрдореА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╣реБрдд рд╕реА рдХрд╛рд░реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореИрдВ рдХрд┐рд╕реА рдФрд░ рдХреА рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЛ рддреЗрдЬрд╝ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реНрдЯреЛрд░ рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЪреВрдВрдХрд┐ PostSharp рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд╛ "рдЕрд╡рд░реЛрдзрди" рд╣реИ, рдЕрд░реНрдерд╛рддреНред рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд┐ рд╣рдо рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рдп рдХреЗ рдХрд╛рдо рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХреЗрдВ, рд╣рдо рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╢рд┐рдВрдЧ рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ:
[ Serializable ]
public class CacheAttribute : MethodInterceptionAspect
{
[NonSerialized]
private static readonly ICache _cache;
private string _methodName;

static CacheAttribute()
{
if (!PostSharpEnvironment.IsPostSharpRunning)
{
// one minute cache
_cache = new StaticMemoryCache( new TimeSpan (0, 1, 0));
// use an IoC container/service locator here in practice
}
}

public override void CompileTimeInitialize(MethodBase method, AspectInfo aspectInfo)
{
_methodName = method.Name;
}

public override void OnInvoke(MethodInterceptionArgs args)
{
var key = BuildCacheKey(args.Arguments);
if (_cache[key] != null )
{
args.ReturnValue = _cache[key];
}
else
{
var returnVal = args.Invoke(args.Arguments);
args.ReturnValue = returnVal;
_cache[key] = returnVal;
}
}

private string BuildCacheKey(Arguments arguments)
{
var sb = new StringBuilder ();
sb.Append(_methodName);
foreach ( var argument in arguments.ToArray())
{
sb.Append(argument == null ? "_" : argument.ToString());
}
return sb.ToString();
}
}

* This source code was highlighted with Source Code Highlighter
.


рдореИрдВ рд╕рдВрдХрд▓рд┐рдд рд╕рдордп рдкрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВ рдФрд░ рд░рди-рдЯрд╛рдЗрдо рдореЗрдВ рдХреИрд╢ рд╕реЗрд╡рд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реВрдВред рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛, рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдмрд┐рд▓реНрдбрдХреИрдЪреЗ рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рджреЗрдЦреЗрдВ), рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдЧрд╛ред OnInvoke рдкрджреНрдзрддрд┐ рдореЗрдВ, рдореИрдВ рдЬрд╛рдВрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХреИрд╢ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИ, рддреЛ рдХреИрд╢ рд╕реЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдореИрдВ рдЕрдЧрд▓реА рдХреЙрд▓ рддрдХ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЗ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред
рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ GetCarValue рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЙрд▓ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдРрд╕реЗ рдорд╛рдирджрдВрдб рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдХреЛрдИ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
[Cache]
public decimal GetCarValue( int year, CarMakeAndModel carType)
{
// simulate web service time
Thread.Sleep(_msToSleep);

int yearsOld = Math .Abs( DateTime .Now.Year - year);
int randomAmount = ( new Random ()).Next(0, 1000);
int calculatedValue = baselineValue - (yearDiscount*yearsOld) + randomAmount;
return calculatedValue;
}

* This source code was highlighted with Source Code Highlighter
.

рдЗрд╕ рдкрд╣рд▓реВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдиреЛрдЯреНрд╕:

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ


рд╣рдореЗрд╢рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХреИрд╢рд┐рдВрдЧ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЛрдИ рд╡рд┐рдзрд┐ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддреА рд╣реИ, IEnumerable, IQueryable, рдЖрджрд┐ред
рдЗрдВрдЯрд░рдлреЗрд╕ред рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ CompileTimeValidate рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
public override bool CompileTimeValidate(MethodBase method)
{
var methodInfo = method as MethodInfo;
if (methodInfo != null )
{
var returnType = methodInfo.ReturnType;
if (IsDisallowedCacheReturnType(returnType))
{
Message.Write(SeverityType.Error, "998" ,
"Methods with return type {0} cannot be cached in {1}.{2}" ,
returnType.Name, _className, _methodName);
return false ;
}
}
return true ;
}

private static readonly IList DisallowedTypes = new List
{
typeof ( Stream ),
typeof ( IEnumerable ),
typeof (IQueryable)
};
private static bool IsDisallowedCacheReturnType(Type returnType)
{
return DisallowedTypes.Any(t => t.IsAssignableFrom(returnType));
}

* This source code was highlighted with Source Code Highlighter
.


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдЙрди рддрд░реАрдХреЛрдВ рдкрд░ рдХреИрд╢рд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЙрд╕реЗ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП IsAssignableFrom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрди рд╡рд░реНрдЧреЛрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рднреА рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдпрд╛рдиреА рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ FileStream, IEnumerable, рдЖрджрд┐ рдХреЛ рднреА рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ


рдорд╣рд╛рди, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдЗрд╕ рдХреИрд╢рд┐рдВрдЧ рдкрд╣рд▓реВ рдореЗрдВ рдЫрд┐рдкреА рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИ? рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЬреИрд╕реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ) рдореЗрдВ, рдХреИрд╢рд┐рдВрдЧ рдЕрдкрдиреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдХреИрд╢ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдХреИрд╢ рдПрдХреНрд╕реЗрд╕ рдХреА рдЧрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рднреА рдХреНрд░реАрдо рдЦреАрдВрдЪрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ? рдХреИрд╢рд┐рдВрдЧ рдкрд╣рд▓реВ рдореЗрдВ рдЬреЛ рд╣рдордиреЗ рдЕрднреА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рджреЛрдиреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣реА рдХреИрд╢ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗред рдПрдХ рдХрд╛рд░ рд╢реЙрдк рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реИрдХрдбрд╝реЛрдВ рдпрд╛ рд╣рдЬрд╛рд░реЛрдВ рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓реЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реИ, рддреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд╛рд░реНрдп рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░рд╛ рдХреИрд╢ рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ "рд▓реЙрдХ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЙрдХрд┐рдВрдЧ рдПрдХ рдорд╣рдВрдЧрд╛ рдФрд░ рдзреАрдорд╛ рдСрдкрд░реЗрд╢рди рд╣реИ, рдФрд░ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рдХреИрд╢ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕реЗ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреИрд╢ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдХреБрдВрдЬреА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдВрдЬреА рдХреЛ рджреЛ рдмрд╛рд░ ( рдбрдмрд▓-рдЪреЗрдХрд┐рдВрдЧ рд▓реЙрдХрд┐рдВрдЧ ) рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЙрдХ рдХреЛрдб рдХреЗ рдмрд╛рд╣рд░ рдФрд░ рдЙрд╕рдХреЗ рдЕрдВрджрд░:
[ Serializable ]
public class CacheAttribute : MethodInterceptionAspect
{
[NonSerialized] private object syncRoot;

public override void RuntimeInitialize(MethodBase method)
{
syncRoot = new object ();
}

public override void OnInvoke(MethodInterceptionArgs args)
{
var key = BuildCacheKey(args.Arguments);
if (_cache[key] != null )
{
args.ReturnValue = _cache[key];
}
else
{
lock (syncRoot)
{
if (_cache[key] == null )
{
var returnVal = args.Invoke(args.Arguments);
args.ReturnValue = returnVal;
_cache[key] = returnVal;
}
else
{
args.ReturnValue = _cache[key];
}
}
}
}
}

* This source code was highlighted with Source Code Highlighter
.


рдпрд╣ рдереЛрдбрд╝рд╛ рджреЛрд╣рд░рд╛рд╡рджрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдЪреНрдЪ-рд▓реЛрдб рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИред рдХреИрд╢ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдХреБрдЫ рдирд┐рдЬреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдЬрд┐рд╕ рдкрд╣рд▓реВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рдм рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рддрд╛рд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реИрдВ? рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╣реИред рдЗрд╕ рдкрд╣рд▓реВ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдЕрдм рдЕрдкрдиреА рдЦреБрдж рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдиреБрднрд╡ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╛ COBOL рдкрд░ 30 рд╕рд╛рд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдирдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реА # рджреЗрдЦрдХрд░ :)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╢ рдкрд╣рд▓реВ рдХреЗ рд╕рд╛рде рддрд░реАрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдлреНрд░реЗрдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдирдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рд╡реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реБрдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдХреЛрдб рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рд╕рдВрджрд░реНрдн:

Source: https://habr.com/ru/post/In123480/


All Articles