2013-10-14 4 views
1

У меня есть приложение, которое использует API Javascript Google 3 и UIWebView для отображения карты на экране. Хотя на этой карте я могу использовать приложение для сбора нескольких точек данных GPS для представления строки.Почему не RemoveAllCacheResponses полностью очищает кеш диска?

enter image description here

После сбора 1460-1480 пунктов приложение неожиданно завершает работу (зажать масштабирование на карте делает приложение бросить курить, прежде чем 1400+ будет достигнут порог). Это проблема памяти (мое приложение - синий клин круговой диаграммы).

enter image description here

карта экран действительно получает несколько предупреждений памяти, которые обрабатываются в перекрытом методе DidReceiveMemoryWarning в этом окне. Существует некоторый предыдущий код, который называется NSUrlCache.SharedCache.RemoveAllCachedResponses.

public override void DidReceiveMemoryWarning() 
{ 

    // BEFORE 
    uint diskUsage = NSUrlCache.SharedCache.CurrentDiskUsage; 
    uint memUsage = NSUrlCache.SharedCache.CurrentMemoryUsage; 
    int points = _currentEntityManager.GeometryPointCount; 
    Console.WriteLine(string.Format("BEFORE - diskUsage = {0}, memUsage = {1}, points = {2}", diskUsage, memUsage, points)); 

    NSUrlCache.SharedCache.RemoveAllCachedResponses(); 

    // AFTER 
    diskUsage = NSUrlCache.SharedCache.CurrentDiskUsage; 
    memUsage = NSUrlCache.SharedCache.CurrentMemoryUsage; 
    points = _currentEntityManager.GeometryPointCount; 
    Console.WriteLine(string.Format("AFTER - diskUsage = {0}, memUsage = {1}, points = {2}", diskUsage, memUsage, points)); 

    base.DidReceiveMemoryWarning();  
} 

Я добавил ДО и ПОСЛЕ секций, чтобы я мог отслеживать содержимое кэша до и после того, как RemoveAllCachedResponses называется.

Общий кэш настроен при запуске приложения (до того, как моя работа над этой проблемой не была настроена вообще).

uint cacheSizeMemory = 1024 * 1024 * 4; 
uint cacheSizeDisk = 1024 * 1024 * 32; 
NSUrlCache sharedCache = new NSUrlCache(cacheSizeMemory, cacheSizeDisk, ""); 
NSUrlCache.SharedCache = sharedCache; 

Когда мы в этой точке данных коллекции экрана и мы получаем предупреждение о низкой памяти, RemoveAllCachedResponses называется и до/после статистики выводится на консоль. Вот цифры для первого предупреждения о низкой памяти, которое мы получаем.

BEFORE - diskUsage = 2258864, memUsage = 605032, points = 1174 
AFTER - diskUsage = 1531904, memUsage = 0, points = 1174 

Что я и ожидал бы случиться - очистка кэша уменьшает использование дискового пространства и памяти (хотя я бы ожидать, что число использование диска также стремится к нулю).

Все последующие вызовы RemoveAllCachedResponses отображают эту статистику (это до/после непосредственно перед сбоем приложения).

BEFORE - diskUsage = 1531904, memUsage = 0, points = 1471 
AFTER - diskUsage = 1531904, memUsage = 0, points = 1471 

Это приводит меня к мысли, одна из двух вещей - 1. RemoveAllCachedResponses не работает (что маловероятно), или 2. есть что-то в кэше диска, который невозможно удалить, так как он используется в настоящее время, что-то вроде текущий набор карт.

Что касается № 2, я хотел бы поверить в это, считая, что сокращение использования диска при первом вызове представляет собой набор плиток, которые больше не используются из-за увеличения размера зума, но при этом не происходит масштабирования или панорамирования на этой карте было сделано, т. е. был загружен и кэширован только один набор исходных плит.

Кроме того, мы загружаем файл API Javascript Google Map в виде локального HTML, поэтому может быть, что этот файл является тем, что остается в кэше. Но файл составляет всего 18 192 байта, который не сжимается с оставшимися в кэше диска 1,531,904 байт.

Следует также упомянуть, что версия Android этого приложения (написанная с Xamarin.Android) не имеет такой проблемы с памятью на экране своей карты - можно собрать 5500 + очков без инцидентов).

Так почему же кеш диска не исчезает до нуля?

Заранее спасибо.

ответ

0

Я тоже смущен об этом. Вы можете взглянуть на вопрос, который я задал. removeAllCachedResponses can not clear sharedURLCache? Товарищ сказал, что «у него есть некоторые дополнительные накладные расходы в кеше, и это не связано с реальными сетевыми данными».

Смежные вопросы