【问题标题】:String Concatenation in a for loop causing app to stall - Xamarinfor 循环中的字符串连接导致应用程序停止 - Xamarin
【发布时间】:2018-02-09 17:58:20
【问题描述】:

我有一个我正在构建的应用程序,它在这个特定点用 C# 构建一个字符串以返回到我的 WebView。简单串联工作得很好,但是当我在 for 循环中这样做时,它会停止。这个循环运行 30-40 次。我读过的东西推荐在循环中使用StringBuilder,但这并没有帮助。我的代码如下所示:

        StringBuilder jsonReturn = new StringBuilder();
        jsonReturn.Append("{");
        for (int i = 0; i < apps.Count(); i++)
        {
            jsonReturn.Append("fooBar");
        }
        jsonReturn.Append("}");
        return jsonReturn.ToString();

如果我注释掉 for 循环内的行,它会完美运行。有什么想法吗?

【问题讨论】:

  • 你所说的“地摊”具体是什么意思?
  • 我想你已经简化了很多代码,因为这绝不是一个有效的 json 字符串
  • @Jason 它冻结并最终崩溃而没有错误。
  • @Steve 是的,当它不起作用时,我简化了代码以试图弄清楚发生了什么。解决此问题后,我可以正确构建 JSON。
  • @Xandor eventually crashes ?某处会有错误,检查logcat输出...

标签: c# android xamarin webview


【解决方案1】:

我相信官方的错误是超时

如果是 ANR(Android 无响应)类型的问题,请将您的字符串处理移出主/UI 线程,将工作放在线程上的 Task.Run 将起作用:

StringBuilder jsonReturn = new StringBuilder();
await Task.Run(() =>
{
    jsonReturn.Append("{");
    for (int i = 0; i < apps.Count(); i++)
    {
        jsonReturn.Append("fooBar");
    }
    jsonReturn.Append("}");
});
return jsonReturn.ToString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多