2015-12-28 3 views
0

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

Необработанное исключение: размер государственного значения настройки менеджера превысил лимит (Excep_FromHResult 0x80073DC8)

Что может вызвать это исключение?

+1

Из-за быстрого google он, похоже, связан с хранением вещей в локальных настройках. Вы очень ограничены в пространстве в локальных настройках, и если вы превысите это пространство, вам нужно будет сериализовать настройки в файл в изолированном хранилище. – pstrjds

+0

У нас нет настроек приложения, которые могут вызвать тревогу, всю кобылу либо числа, либо простые строки, ни JSON, ни XML, ни какие-либо сложные или сложные значения. – user1744147

+0

Я не думаю, что это важно, сложны они или нет. Это объем не сложность. Вы должны убедиться, что настройки не являются проблемой, поскольку, поскольку в googling исключение вы получаете, это, казалось, самый общий результат, вызванный слишком большими настройками. Решение - сохранить настройки в файле в изолированном хранилище. – pstrjds

ответ

7

LocalSettings имеют некоторые ограничения, см замечания раздел ApplicationData.LocalSettings | localSettings property:

Имя каждого параметра может быть 255 символов длиной не более. Каждый параметр может иметь размер до 8 Кбайт, и каждый составной параметр может иметь размер до 64 Кбайт.

Если размер параметра слишком велик, это приведет к возникновению этого исключения. Несмотря на отсутствие общего ограничения размера общего количества настроек, лучше хранить большие наборы данных в файлах в изолированном хранилище. Так, например, @pstrjds, вам может потребоваться проверить размер настроек в вашем приложении, и если некоторые из них могут быть большими, вы можете попытаться сохранить их в LocalFolder.

0

Проделал некоторые тесты в приложении Universal Windows и обнаружил, что каждое значение свойства не должно превышать 4095 байт. Таким образом, следующий код исправит его:

/// <summary> 
/// Application settings 
/// Limit to 200*4095 
/// </summary> 
private const string SET_STR = "SETTINGS"; 
private const int CHUNK_SIZE = 4095; 
static private ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; 
static private string AppSettings { 
    get { 
     string set = ""; 
     for (int i = 0;i < 200;i++) { 
      string s = (string)localSettings.Values[SET_STR + i]; 
      if (s != null) { 
       set += s; 
      } else { 
       break; 
      } 
     } 
     return set; 
    } 
    set { 
     for (int i = 0;i < 200;i++) { 
      localSettings.Values[SET_STR + i] = null; 
     } 
     for (int i = 0;i * CHUNK_SIZE < value.Length;i++) { 
      if (value.Length > i * CHUNK_SIZE) { 
       int len = (i + 1) * CHUNK_SIZE > value.Length ? value.Length % CHUNK_SIZE : CHUNK_SIZE; 
       localSettings.Values[SET_STR + i] = value.Substring(i * CHUNK_SIZE, len); 
      } 
     } 
    } 
} 
Смежные вопросы