C # .NET рдореЗрдВ C # рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░! рдкрд╛рдареНрдпрдХреНрд░рдо "рд╕реА # ASP.NET рдХреЛрд░ рдбреЗрд╡рд▓рдкрд░" рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ , рд╣рдордиреЗ C # рдореЗрдВ рдХреИрд╢ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред рдкрдврд╝рдиреЗ рдХрд╛ рдордЬрд╝рд╛ рд▓реЗрдВред



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

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

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

рд╕реНрдерд╛рдиреАрдп рдХреИрд╢, рд▓рдЧрд╛рддрд╛рд░ рд╕реНрдерд╛рдиреАрдп рдХреИрд╢, рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХреИрд╢


рдХреИрд╢ рдХреЗ 3 рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

  • рдЗрди-рдореЗрдореЛрд░реА рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреИрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд░ рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреИрд╢ рдЗрд╕рдХреЗ рд╕рд╛рде рдорд░ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХреИрд╢ рд╣реЛрдЧрд╛ред
  • рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╢ - рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдХреЗ рдмрд╛рд╣рд░ рдХреИрд╢ рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдореЗрдореЛрд░реА рдореЗрдВ рдХреИрд╢ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреИрд╢ рдлреНрд▓рд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрд╣рд╛рдВ рдХреИрд╢реНрдб рдЖрдЗрдЯрдо рдорд┐рд▓рдирд╛ рдорд╣рдВрдЧрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╛рд░-рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
  • рд╡рд┐рддрд░рд┐рдд рдХреИрд╢ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрдИ рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдХреИрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпреЗ рдХрдИ рд╕рд░реНрд╡рд░ рд╣реЛрддреЗ рд╣реИрдВред рд╡рд┐рддрд░рд┐рдд рдХреИрд╢ рдХреЛ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рд╕рд░реНрд╡рд░ рдиреЗ рдХреИрд╢ рддрддреНрд╡ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рд╕рд░реНрд╡рд░ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реЗрдбрд┐рд╕ рдЬреИрд╕реА рд╕реЗрд╡рд╛рдПрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИрдВред

рд╣рдо рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдХреИрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ ред

рдЖрджрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЖрдЗрдП C # рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХреИрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ:

public class NaiveCache<TItem>
{
    Dictionary<object, TItem> _cache = new Dictionary<object, TItem>();
 
    public TItem GetOrCreate(object key, Func<TItem> createItem)
    {
        if (!_cache.ContainsKey(key))
        {
            _cache[key] = createItem();
        }
        return _cache[key];
    }
}

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:

var _avatarCache = new NaiveCache<byte[]>();
// ...
var myAvatar = _avatarCache.GetOrCreate(userId, () => _database.GetAvatar(userId));

рдпрд╣ рд╕рд░рд▓ рдХреЛрдб рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрд╡рддрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрд░реЛрдз рд╣реЛрдЧрд╛ред byte []рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд╡рддрд╛рд░ рдбреЗрдЯрд╛ ( ) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рдмрд╛рдж рдХреЗ рд╕рднреА рдЕрд╡рддрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реБрдП рдЗрд╕реЗ рдореЗрдореЛрд░реА рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреИрд╢ рд╕реЗ рдЖрдЗрдЯрдо рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

  1. рдПрдХ рдХреИрд╢ рдмрд╣реБрдд рд╕рд╛рд░реА рдореЗрдореЛрд░реА рд▓реЗрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдВрддрддрдГ рдЗрд╕рдХреА рдХрдореА рдФрд░ рдХреНрд░реИрд╢ рдХреЗ рдХрд╛рд░рдг рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред
  2. рдЙрдЪреНрдЪ рдореЗрдореЛрд░реА рдЦрдкрдд рд╕реЗ рдореЗрдореЛрд░реА рджрдмрд╛рд╡ (рдЬрд┐рд╕реЗ GC рджрдмрд╛рд╡ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЛ рдЪрд╛рд╣рд┐рдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред
  3. рдбреЗрдЯрд╛ рдмрджрд▓рдиреЗ рдкрд░ рдХреИрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдХреИрд╢рд┐рдВрдЧ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрдерд╛рдкрди рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдврд╛рдБрдЪреЗ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ (рдЬрд┐рд╕реЗ рдиреАрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрд╡рд┐рдХреНрд╢рди / рд░рд┐рдореВрд╡рд▓ рдкреЙрд▓рд┐рд╕реА )ред рдпреЗ рджрд┐рдП рдЧрдП рддрд░реНрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреИрд╢ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдирд┐рдпрдо рд╣реИрдВред рд╣рдЯрд╛рдиреЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

  • рдПрдХ рдирд┐рд░рдкреЗрдХреНрд╖ рд╕рдорд╛рдкреНрддрд┐ рдиреАрддрд┐ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рдмрд╛рдж рдХреИрд╢ рд╕реЗ рдПрдХ рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛ рджреЗрддреА рд╣реИ, рдЪрд╛рд╣реЗ рдЬреЛ рднреА рд╣реЛред
  • рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ рд╕рдорд╛рдкреНрддрд┐ рдиреАрддрд┐ рдЬреЛ рдХреИрд╢ рд╕реЗ рдПрдХ рдЖрдЗрдЯрдо рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдореИрдВ рд╕рдорд╛рдкреНрддрд┐ рдХрд╛ рд╕рдордп 1 рдорд┐рдирдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЖрдЗрдЯрдо рдХреИрд╢ рдореЗрдВ рд░рд╣реЗрдЧрд╛, рдЬрдмрдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╣рд░ 30 рд╕реЗрдХрдВрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдореИрдВ рдПрдХ рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЖрдЗрдЯрдо рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рдЖрдХрд╛рд░ рд╕реАрдорд╛ рдиреАрддрд┐ , рдЬреЛ рдХреИрд╢ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдЧреАред

рдЕрдм рдЬрдм рд╣рдореЗрдВ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬрд╝ рдХрд╛ рдкрддрд╛ рдЪрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред

рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди


рдПрдХ рдмреНрд▓реЙрдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реА рдмрдбрд╝реА рдирд┐рд░рд╛рд╢рд╛ рдХреЗ рд▓рд┐рдП, Microsoft рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдЕрджреНрднреБрдд рдХреИрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИред рдЗрд╕рдиреЗ рдореБрдЭреЗ рдЦреБрдж рдХреЛ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдиреЗ рдХреА рдЦреБрд╢реА рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд▓реЗрдЦрди рднреА рдХрдо рд╣реИред

рдореИрдВ рдЖрдкрдХреЛ рдПрдХ Microsoft рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░рдирд╛ рд╣реИред

System.Runtime.Caching / MemoryCache рдмрдирд╛рдо Microsoft.Extensions.Caching.Memory


Microsoft рдореЗрдВ 2 рд╕рдорд╛рдзрд╛рди, 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ NuGet рдХреИрд╢рд┐рдВрдЧ рдкреИрдХреЗрдЬ рд╣реИрдВред рджреЛрдиреЛрдВ рдорд╣рд╛рди рд╣реИрдВред рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ Microsoft.Extensions.Caching.Memory, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд╕реНрдк рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдиреЗрдЯ рдХреЛрд░ред рдЗрд╕реЗ Asp .NET Core рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рддрдВрддреНрд░ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ Microsoft.Extensions.Caching.Memory:

public class SimpleMemoryCache<TItem>
{
    private MemoryCache _cache = new MemoryCache(new MemoryCacheOptions());
 
    public TItem GetOrCreate(object key, Func<TItem> createItem)
    {
        TItem cacheEntry;
        if (!_cache.TryGetValue(key, out cacheEntry)) //    .
        {
            //    ,   .
            cacheEntry = createItem();
            
            //    . 
            _cache.Set(key, cacheEntry);
        }
        return cacheEntry;
    }
}

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:

var _avatarCache = new SimpleMemoryCache<byte[]>();
// ...
var myAvatar = _avatarCache.GetOrCreate(userId, () => _database.GetAvatar(userId));

рдпрд╣ рдореЗрд░реА рдЦреБрдж рдХреА рдмрд╣реБрдд рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ NaiveCache, рддреЛ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ? рдЦреИрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдПрдХ рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдХрдИ рдереНрд░реЗрдб рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджреВрд╕рд░реЗ, рдпрд╣ MemoryCacheрдЙрди рд╕рднреА рднреАрдбрд╝-рднрд╛рдбрд╝ рд╡рд╛рд▓реА рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ , рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдмрд╛рдд рдХреА рдереАред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

рдкреВрд░реНрд╡ рднреБрдЧрддрд╛рди рдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде IMemoryCache:

public class MemoryCacheWithPolicy<TItem>
{
    private MemoryCache _cache = new MemoryCache(new MemoryCacheOptions()
    {
        SizeLimit = 1024
    });
 
    public TItem GetOrCreate(object key, Func<TItem> createItem)
    {
        TItem cacheEntry;
        if (!_cache.TryGetValue(key, out cacheEntry))//    .
        {
            //    ,   . 
            cacheEntry = createItem();
 
            var cacheEntryOptions = new MemoryCacheEntryOptions()
         	.SetSize(1)// 
         	//        (  )
                .SetPriority(CacheItemPriority.High)
                //       ,    .
                 .SetSlidingExpiration(TimeSpan.FromSeconds(2))
                //       ,    .
                .SetAbsoluteExpiration(TimeSpan.FromSeconds(10));
 
            //    .
            _cache.Set(key, cacheEntry, cacheEntryOptions);
        }
        return cacheEntry;
    }
}

рдЖрдЗрдП рдирдП рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:

  1. MemoryCacheOptions рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ SizeLimitред рдпрд╣ рд╣рдорд╛рд░реЗ рдХреИрд╢ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЖрдХрд╛рд░ рд╕реАрдорд╛ рдиреАрддрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдореЗрдВ рдПрдХ рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рд░ рдмрд╛рд░ рд╣рдо рдЖрдХрд╛рд░ рдХреЛ 1 рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ SetSize(1)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреИрд╢ рдореЗрдВ 1024 рддрддреНрд╡реЛрдВ рдХреА рд╕реАрдорд╛ рд╣реЛрдЧреАред
  2. , ? .SetPriority (CacheItemPriority.High). : Low (), Normal (), High () NeverRemove ( ).
  3. SetSlidingExpiration(TimeSpan.FromSeconds(2)) 2 . , 2 , .
  4. SetAbsoluteExpiration(TimeSpan.FromSeconds(10)) 10 . , 10 , .

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ RegisterPostEvictionCallbackрдЬрд┐рд╕реЗ рдЖрдЗрдЯрдо рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рд╣рдореЗрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рд▓рд╛рдкрддрд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ


рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдЧрд╛рдпрдм рд╣реИрдВред

  1. рдЬрдм рдЖрдк рдПрдХ рдЖрдХрд╛рд░ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХреИрд╢рд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдореГрддрд┐ рджрдмрд╛рд╡ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдЪреНрдЪ рджрдмрд╛рд╡ рдХреЗ рд╕рд╛рде рдиреАрддрд┐ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрдо рдХреЗ рд╕рд╛рде рдиреАрддрд┐ рдХреЛ рдХрдордЬреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  2. , . . , , , 10 . 2 , , ( ), .

Gc рдкрд░ рджрдмрд╛рд╡ рдХреА рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ : рдпрд╣ рдХрдИ рддрд░реАрдХреЛрдВ рдФрд░ heuristics рджреНрд╡рд╛рд░рд╛ gc рдкрд░ рджрдмрд╛рд╡ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдкреЛрд╕реНрдЯ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд▓реЗрдЦ "рдвреВрдБрдврдирд╛, рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдФрд░ рдореЗрдореЛрд░реА рд▓реАрдХреНрд╕ рдХреЛ C # .NET: 8 рдмреЗрд╕реНрдЯ рдкреНрд░реИрдХреНрдЯрд┐рд╕" рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред

рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ MemoryCacheрдЬреЛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:

public class WaitToFinishMemoryCache<TItem>
{
    private MemoryCache _cache = new MemoryCache(new MemoryCacheOptions());
    private ConcurrentDictionary<object, SemaphoreSlim> _locks = new ConcurrentDictionary<object, SemaphoreSlim>();
 
    public async Task<TItem> GetOrCreate(object key, Func<Task<TItem>> createItem)
    {
        TItem cacheEntry;
 
        if (!_cache.TryGetValue(key, out cacheEntry))//    .
        {
            SemaphoreSlim mylock = _locks.GetOrAdd(key, k => new SemaphoreSlim(1, 1));
 
            await mylock.WaitAsync();
            try
            {
                if (!_cache.TryGetValue(key, out cacheEntry))
                {
                    //    ,   .
                    cacheEntry = await createItem();
                    _cache.Set(key, cacheEntry);
                }
            }
            finally
            {
                mylock.Release();
            }
        }
        return cacheEntry;
    }
}

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:

var _avatarCache = new WaitToFinishMemoryCache<byte[]>();
// ...
var myAvatar =
await _avatarCache.GetOrCreate(userId, async () => await _database.GetAvatar(userId));

рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЬрдм рдЖрдк рдПрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╡рд╣реА рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рдереНрд░реЗрдб рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдлрд┐рд░ рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреИрд╢реНрдб рд╡рд╕реНрддреБ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред

рдХреЛрдб рдкрд╛рд░реНрд╕рд┐рдВрдЧ


рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рддрддреНрд╡ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рддрд╛рд▓рд╛ рдПрдХ рдЪрд╛рдмреА рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдПрд▓реЗрдХреНрд╕реА рдХреЗ рдЕрд╡рддрд╛рд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрднреА рднреА рдПрдХ рдЕрдиреНрдп рд╕реВрддреНрд░ рдореЗрдВ рдЭреЗрдиреНрдпрд╛ рдпрд╛ рдмрд╛рд░рдмрд░рд╛ рдХреЗ рдХреИрд╢реНрдб рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╢рдмреНрджрдХреЛрд╢ _locksрд╕рднреА рддрд╛рд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рддрд╛рд▓реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ async/await, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реЗрдореАрдлреЛрд░рд╕реНрд▓реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП 2 рдЪреЗрдХ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдореВрд▓реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреИрд╢ рд╣реИ рдпрд╛ рдирд╣реАрдВ (!_Cache.TryGetValue(key, out cacheEntry))ред рд▓реЙрдХ рдореЗрдВ рдПрдХ рд╡рд╣ рд╣реИ рдЬреЛ рддрддреНрд╡ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЬреЛ рд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рд╣реИ, рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдПред

рдХрдм рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ WaitToFinishMemoryCache


рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХрдм рд╣реИред рдЬрдм

рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ WaitToFinishMemoryCache:

  • рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХрд╛ рдХреЛрдИ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдпрдерд╛рд╕рдВрднрд╡ рд░рдЪрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  • рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛред
  • рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдПрдХ рдЖрдЗрдЯрдо рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

WaitToFinishMemoryCacheрдЬрдм рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ :

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

рд╕рд╛рд░рд╛рдВрд╢


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

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд▓реЗрдЦ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдЕрдЧрд▓рд╛ рд▓реЗрдЦ рдЬреАрд╕реА рдкрд░ рджрдмрд╛рд╡ рдХреЗ рдЦрддрд░реЛрдВ рдФрд░ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░реЗрдВ ред рдЕрдкрдиреА рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВред



рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред



All Articles