未处理的异常:状态管理器设置值的大小已超出限制
本文关键字:异常 状态 管理器 设置 未处理 | 更新日期: 2023-09-27 18:28:20
我们的一些客户看到了这种未经处理的异常,我们自己从未经历过,也无法重现。
未处理的异常:状态管理器设置值的大小已超过限制(Excep_FromHResult 0x80073DC8)
是什么原因导致了此异常?
LocalSettings
确实有一些限制,请参阅ApplicationData.LocalSettings|LocalSettings属性中的备注部分:
每个设置的名称最多可以是255个字符。每个设置的大小最多可达8K字节,每个组合设置的大小最大可达64K字节。
当设置的大小过大时,会引发此异常。尽管对设置的总数没有一般的大小限制,但最好将大型数据集存储到独立存储中的文件中。因此,正如@pstrjds所说,你可能需要验证应用程序中设置的大小,如果其中一些设置可能很大,你可以尝试将它们存储在LocalFolder
中。
对通用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);
}
}
}
}