0

SharePoint 2010から同義語を取得しようとしていますが、コードに次の問題がありますkeywordCollection。インデクサーのないをループします。foreach新しいキーワードのインスタンス化には約5〜10ミリ秒かかり、これまでのところ約8000個のキーワードがあるため、実行には時間がかかりすぎます。完了するまでに約80秒かかります。私がこれまでに試したこと:

  • 列挙子を取得->80秒もかかります

  • コレクションをリストにキャスト->不明な理由で失敗します。

コードサンプル:

KeywordContext keywordContext = fastProxy.KeywordContext;
SearchSettingGroupCollection searchSettingGroupCollection = keywordContext.SearchSettingGroups;

foreach (SearchSettingGroup searchSettingGroup in searchSettingGroupCollection)
{
    if (searchSettingGroup.Name == siteId.ToString())
    {
        foreach (Keyword keyword in searchSettingGroup.Keywords)
        {
            //the rest of the work here, per total takes about 470ms
        }
    }
}

毎回foreach新しいものをインスタンス化するステートメントを使用せずにコレクションをループする方法はありますか?object<T>

ありがとう!

4

1 に答える 1

0

これを試して:

using (var site = new SPSite(siteCollectionUrl))
{
    // get the site ID
    var guid = site.ID.ToString();

    // code to get the fastProxy FASTAdminProxy

    KeywordContext keywordContext = fastProxy.KeywordContext;
    var ssgs = keywordContext.SearchSettingGroups;
    if (ssgs.ContainsSearchSettingGroup(guid))
    {
        var searchSettingGroup = ssgs.GetSearchSettingGroup(guid);
        foreach (var keyWord in searchSettingGroup.Keywords)
        {
            // do stuff with keyWord.Synonyms
        }
    }
}

また、現時点ではテストできませんが、次の Parallelクラスを使用してみてください。

using System.Threading.Tasks;

// ...

Keyword[] array = new Keyword[searchSettingGroup.Keywords.Count];
searchSettingGroup.Keywords.CopyTo(array, 0);
Parallel.ForEach<Keyword>(array, keyword =>
{
    //do stuff here
});
于 2013-02-14T12:05:27.553 に答える