我们的一些客户看到了这种未经处理的异常,我们从未体验过或者无法重现。
未处理的异常:状态管理器设置值的大小已超出限制(Excep_FromHResult 0x80073DC8)
什么可能导致此异常?
答案 0 :(得分:7)
LocalSettings
确实有一些限制,请参阅ApplicationData.LocalSettings | localSettings property中的备注部分:
每个设置的名称最多可以包含255个字符。每个设置的大小最多为8K字节,每个复合设置的大小最多为64K字节。
当设置的大小太大时,会引发此异常。尽管对设置总数没有一般的大小限制,但最好将大型数据集存储到隔离存储中的文件中。就像@pstrjds所说,您可能需要验证应用中设置的大小,如果其中一些设置可能很大,您可以尝试将它们存储在LocalFolder
中。
答案 1 :(得分: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);
}
}
}
}