/// <summary>
 /// Очистить кеш
 /// </summary>
 public void Clear()
 {
     for (int i = 0; i < CacheMemory.Length; i++)
     {
         CacheMemory[i] = new CachObj();
     }
 }
        /// <summary>
        /// Положить данные в кеш
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public void Put(object key, object value)
        {
            //Initializing fields
            int     emptyIndex         = 0;
            Boolean isSingleEntryEmpty = false;
            Boolean cacheUpdated       = false;
            //Получить промежуток массива на основе Id
            int ID         = GetHash(key);
            int startIndex = GetStartIndex(ID);
            int endIndex   = GetEndIndex(startIndex);

            CachObj newCacheEntry = new CachObj(key, value, null, ID);

            newCacheEntry.AD = replacementAlgo.GetReplasmentMark(newCacheEntry);

            for (int i = startIndex; i <= endIndex; i++)
            {
                // Определить есть ли свободная строка в этом промежутке
                if (CacheMemory[i].IsEmpty && !isSingleEntryEmpty)
                {
                    emptyIndex         = i;
                    isSingleEntryEmpty = true;
                    continue;
                }

                // Обновить данные в кеше
                if (CacheMemory[i].Id == ID)
                {
                    CacheMemory[i] = newCacheEntry;
                    cacheUpdated   = true;
                    break;
                }
                else
                {
                    continue;
                }
            }

            // Если не нашли еще объект в кеше и есть пуста строка, то положить объект в пустую строку
            if (isSingleEntryEmpty && !cacheUpdated)
            {
                CacheMemory[emptyIndex] = newCacheEntry;
                cacheUpdated            = true;
            }

            // Если кеш не был обновлен, значит все строки заняты, почистить строку и положить туда объект
            if (!cacheUpdated)
            {
                int evictedIndex = replacementAlgo.GetEvictedIndex(startIndex, endIndex, CacheMemory);
                CacheMemory[evictedIndex] = newCacheEntry;
            }
        }
        public object GetReplasmentMark(CachObj cachObj)
        {
            long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

            return(milliseconds);
        }