Ключ кеширования вызывает ошибку «Отрицание минимального значения двоичного дополнения недопустимо».

Это одна из самых странных ошибок, которые я когда-либо видел.

Я делаю очень простой вызов для возврата значений из кеша HttpRuntime. Вызов:

return HttpContext.Current.Cache[cacheKey];

Если он возвращает ноль, ничего страшного. Я проверяю, является ли возвращаемое значение нулевым, и действую соответственно. Я давно использую этот вызов.

Недавно по какой-то причине, когда cacheKey установлен на это точное значение:

"Topic_GridSelectAll:5,null,2010-08-31-20-00-00,Published,desc,5,1"

генерируется исключение System.OverflowException: Отрицание минимального значения двоичного дополнения недопустимо.

Ничего не изменилось в вызове, связанном коде или сервере. Если cacheKey имеет несколько другие символы, он работает отлично. Например, этот cacheKey возвращает значение null, не вызывая исключения:

"Topic_GridSelectAll:5,null,2010-08-31-21-00-00,Published,desc,5,1"

Обратите внимание, единственная разница между этими двумя строками - это символы времени: 2010-08-31-20-00-00 по сравнению с 2010-08-31-21-00 -00.

Какого черта это имеет значение? И почему именно сейчас, после всего этого времени?

Трассировка стека:

[OverflowException: Negating the minimum value of a twos complement number is invalid.]
   System.Math.AbsHelper(Int32 value) +12753486
   System.Web.Caching.CacheMultiple.UpdateCache(CacheKey cacheKey, CacheEntry newEntry, Boolean replace, CacheItemRemovedReason removedReason, Object& valueOld) +142
   System.Web.Caching.CacheInternal.DoGet(Boolean isPublic, String key, CacheGetOptions getOptions) +122
   MyProject.Helpers.CacheHelper.GetData(String cacheDomain, String cacheKey) in ...

Я попытался изменить вызов кеша, чтобы вместо этого использовать HttpRuntime.Cache (например, HttpRuntime.Cache [cacheKey] ), но это не имело значения. Я знаю, что это тот же базовый поставщик кеша, но я подумал, что, возможно, другой вызов будет иметь значение. Никаких кубиков. {public void StartEngine () {// Код здесь. } } публичный класс CityBus: Vehicle {public void MoveToLocation (Местоположение ...

Рассмотрим следующий код:

public class Vehicle
{
    public void StartEngine()
    {
        // Code here.
    }
}

public class CityBus : Vehicle
{
    public void MoveToLocation(Location location)
    {
        ////base.StartEngine();
        this.StartEngine();
        // Do other stuff to drive the bus to the new location.
    }
}

Есть ли разница между this.StartEngine (); и base.StartEngine (); , за исключением того, что во втором случае метод StartEngine нельзя переместить или переопределить в классе CityBus ? Имеется ли влияние на производительность?

6
задан Arseni Mourzenko 1 September 2010 в 02:04
поделиться