未处理的异常:状态管理器设置值的大小已超出限制

时间:2015-12-28 15:38:37

标签: c# uwp windows-10-universal

我们的一些客户看到了这种未经处理的异常,我们从未体验过或者无法重现。

  

未处理的异常:状态管理器设置值的大小已超出限制(Excep_FromHResult 0x80073DC8)

什么可能导致此异常?

2 个答案:

答案 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);
            }
        }
    }
}