このC#コードを最適化するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2543516

  •  23-09-2019
  •  | 
  •  

質問

私は自分の変換しました Datatablejson 文字列次の方法を使用してください...

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();
}

これは十分に公平ですか、それとも最適化の余地があり、それをより速く実行させるためのマージンがあります....どんな提案...

役に立ちましたか?

解決

次のを試してください

   <PublishingWebControls:RichImageField FieldName="InteralFieldName" runat="server"/>
.

あなたのページレイアウトの上には、次のものを持つ必要があります。

<%@ Register TagPrefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
.

どちらを使うかを発見しようとしていたときは、SharePoint Designerを使用しました。SharePointサイトに必要なものをデプロイし、詳細モードで編集してから、[ページ]フィールドに[ツールボックス]フィールドに表示されます。それらをページにドラッグすることで、定義方法が表示されます。

他のヒント

より速く実行する方法があるかもしれません - しかし、あなたはあなたが 必要 より速く実行するために?これがあなたのコードの重要なボトルネックであると信じる正当な理由はありますか?もしそうなら、コードを実際のデータでベンチマークし、時間がどこに向かっているのかを解決するためのルーチンをプロファイルします。

*ワイルドカード文字は、「wild *」ではなく「*カード」ではなく、プレフィックスのマッチングでのみサポートされています。あなたの文書のタグ付けのためのあなたのアプローチを拡大することをお勧めします。タイトルを作成するだけでなく、文書にタグを付けるためにSharePointメタデータを使用することをお勧めします。たとえば、ドキュメント、製品、バリアント、補足、ID、PublishedDate、およびLanguageのフィールドを追加します。SharePoint 2013でサイト列を使用する場合、それらはあなたのために管理されたプロパティに変換され、KQLまたはRailiningを使用して検索を実行することができます。

:製品: "superthing2000"バリアント: "b" id="13580" PublishedDate> 08/01/2011

データの抽出を自動化する方法はいくつかあり、イベント受信機はこの非常に簡単に解決するためにWritteになることができます。

なぜ最適化が必要だと思いますか?一部のデータテーブルでは本当に遅いですか? Newton JSON SerializerのようなものでDatatableをシリアル化するだけで、シリアル化可能であれば。

リファクタリング コードは、Resharper、JustCodeなどのツールを使用して、少し整理します。方法を抽出し、個々のテスト(テスト駆動型開発型)を使用して、コード内のボトルネックを見つけてからそれらを調整します。

しかし、あなたの最初のステップは次のとおりです。 リファクタリング!

コードの問題は速度ではありませんが、クリーンアップされていません。私はいくつかのクリーンアップをしましたが、おそらくさらに多くのことをすることができます:

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();
}

.NET 3.0または3.5を使用している場合、別のソリューションをお勧めします

これを行う代わりに

  1. データテーブルをXMLに変換します
  2. XMLSerializerを使用してXMLをドメインオブジェクトに変換します
  3. JavaScriptSerializer(System.Web.extensions.dll)を使用して、ドメインオブジェクトをJSON文字列にシリアル化します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top