Frage

Ich habe meine konvertiert Datatable zu json String Verwenden Sie die folgende Methode ...

public string GetJSONString(DataTable Dt)
{
    string[] StrDc = new string[Dt.Columns.Count];
    string HeadStr = string.Empty;
    for (int i = 0; i < Dt.Columns.Count; i++)
    {
        StrDc[i] = Dt.Columns[i].Caption;
        HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
    }
    HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);
    StringBuilder Sb = new StringBuilder();

    Sb.Append("{\"" + Dt.TableName + "\" : [");
    for (int i = 0; i < Dt.Rows.Count; i++)
    {
        string TempStr = HeadStr;
        Sb.Append("{");
        for (int j = 0; j < Dt.Columns.Count; j++)
        {
            if (Dt.Rows[i][j].ToString().Contains("'") == true)
            {
                Dt.Rows[i][j] = Dt.Rows[i][j].ToString().Replace("'", "");
            }
            TempStr = TempStr.Replace(Dt.Columns[j] + j.ToString() + "¾", Dt.Rows[i][j].ToString());
        }
        Sb.Append(TempStr + "},");
    }
    Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
    Sb.Append("]}");
    return Sb.ToString();
}

Ist das fair genug oder dennoch gibt es einen Rand für die Optimierung, damit es schneller ausgeführt wird ... jeder Vorschlag ...

War es hilfreich?

Lösung

Versuchen Sie das Folgende generasacodicetagpre.

Sie müssen das Folgende in der Spitze Ihres Seitenlayouts haben. generasacodicetagpre.

Wenn ich versuchte, zu entdecken, welche zu verwenden, habe ich SharePoint Designer verwendet.Stellen Sie bereit, was Sie zu Ihrer SharePoint-Site haben, öffnen Sie Ihr Seitenlayout in SPD und bearbeiten Sie im erweiterten Modus, und dann in der Toolbox unter Seitenfelder sollten Sie Ihre Inhaltsfelder anzeigen.Wenn Sie sie auf der Seite ziehen, werden Sie sehen, wie sie definiert werden sollen.

Andere Tipps

Es kann durchaus Möglichkeiten geben, es schneller auszuführen - aber haben Sie einen Hinweis darauf, dass Sie brauchen es schneller auszuführen? Haben Sie einen guten Grund zu der Annahme, dass dies ein bedeutender Engpass in Ihrem Code ist? In diesem Fall können Sie den Code mit einigen realen Daten bewerten und die Routine profilieren, um herauszufinden, wo die Zeit verläuft.

Das Feld * WildCard-Zeichen wird nur für das Präfixabgleich unterstützt, "wild *" nicht "* card".Ich würde vorschlagen, dass Sie Ihren Ansatz zum Markieren Ihrer Dokumente erweitern.Ich würde vorschlagen, dass Sie SharePoint-Metadaten verwenden, um Ihre Dokumente zu kennzeichnen, anstatt nur einen Titel zu erstellen.Fügen Sie beispielsweise ein Feld für Dokument, Produkt, Variante, Ergänzung, ID, Veröffentlichungsdate und Sprache hinzu.Wenn Sie Site-Spalten in SharePoint 2013 verwenden, werden sie für Sie in verwaltete Eigenschaften konvertiert, und dann können Sie eine Suche mit KQL oder Raffinesse durchführen.

Beispiel: Produkt: "Superthing2000" Variante: "B" ID="13580" VeröffentlichtDate> 08/01/2011

Es gibt verschiedene Möglichkeiten, die Extraktion der Daten zu automatisieren, ein Ereignisempfänger könnte beschreiben, um dies sehr einfach zu lösen.

Warum muss es Ihrer Meinung nach optimiert werden? Ist es bei einigen DataTables wirklich langsam? Ich würde nur DataTable mit so etwas wie Newton Json Serializer serialisieren, wenn es überhaupt serialisierbar ist.

Refaktor Verwenden Sie Ihr Code, verwenden Sie ein Tool wie Resharper, JustCode usw., um es ein wenig aufzuräumen. Extrahieren Sie Methoden und verwenden Sie einzelne Tests (testgetriebene Entwicklung), um Engpässe in Ihrem Code zu finden, und optimieren Sie diese dann.

Aber Ihr erster Schritt sollte sein: Refaktor!

Das Problem mit dem Code ist keine Geschwindigkeit, sondern dass er nicht aufgeräumt wird. Ich habe etwas aufräumen, aber Sie könnten wahrscheinlich noch mehr tun:

public string GetJSONString2(DataTable table)
{
    StringBuilder headStrBuilder = new StringBuilder(table.Columns.Count * 5); //pre-allocate some space, default is 16 bytes
    for (int i = 0; i < table.Columns.Count; i++)
    {
        headStrBuilder.AppendFormat("\"{0}\" : \"{0}{1}¾\",", table.Columns[i].Caption, i);
    }
    headStrBuilder.Remove(headStrBuilder.Length - 1, 1); // trim away last ,

    StringBuilder sb = new StringBuilder(table.Rows.Count * 5); //pre-allocate some space
    sb.Append("{\"");
    sb.Append(table.TableName);
    sb.Append("\" : [");
    for (int i = 0; i < table.Rows.Count; i++)
    {
        string tempStr = headStrBuilder.ToString();
        sb.Append("{");
        for (int j = 0; j < table.Columns.Count; j++)
        {
            table.Rows[i][j] = table.Rows[i][j].ToString().Replace("'", "");
            tempStr = tempStr.Replace(table.Columns[j] + j.ToString() + "¾", table.Rows[i][j].ToString());
        }
        sb.Append(tempStr + "},");
    }
    sb.Remove(sb.Length - 1, 1); // trim last ,
    sb.Append("]}");
    return sb.ToString();
}

Ich würde eine andere Lösung vorschlagen, wenn Sie .NET 3.0 oder 3.5 verwenden

Anstatt das zu tun

  1. DataTable in XML konvertieren
  2. Verwenden Sie XMLSerializer, um das XML in Ihr Domänenobjekt umzuwandeln
  3. Verwenden von JavaScriptSerializer (System.Web.Extensions.dll), um das Domänenobjekt mit JSON String zu serialisieren.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top