代码之家  ›  专栏  ›  技术社区  ›  Moo

将字符串分配给splistem字段时出现无法解释的延迟

  •  0
  • Moo  · 技术社区  · 15 年前

    我正在通过与SharePoint安装相同服务器上的控制台应用程序使用SharePoint对象模型,并使用以下代码:

    SPSite MySite = new SPSite("http://server/");
    SPWeb MyWeb = MySite.OpenWeb();
    MyWeb.AllowUnsafeUpdates = true;
    SPList MyList = MyWeb.Lists["Test"];
    
    const string EmptyQuery = "0";
    SPQuery q = new SPQuery { Query = EmptyQuery };
    
    String Source = "Test String";
    
    for( int i = 1; i < 1000; i++)
    {
        Console.WriteLine("Creating new item");
    
        SPListItem MyItem = MyList.GetItems(q).Add();
    
        Console.WriteLine("Created new item");
    
        Console.WriteLine("Assigning Title Value");
    
        MyItem["Title"] = Source.ToString();
    
        Console.WriteLine("Assigned Title Value");
    
        MyItem.Update();
    }
    

    我在“分配标题值”和“分配标题值”之间停顿了几秒钟。

    当我将代码部署为Web部件时,它是即时的,只有当代码部署为控制台应用程序时才会出现延迟。

    编辑:更多信息!当我有多个字段被分配时, 总是 第一个字段很慢,任何后续的分配都和预期的一样快。如果我切换字段的顺序,它对延迟没有影响——第一个字段总是很慢。

    有什么想法吗?

    3 回复  |  直到 15 年前
        1
  •  5
  •   Rex M    15 年前

    看起来这是因为在使用setter之前您没有访问任何字段。如果你先读至少一个字段,你可能会看到那里有轻微的延迟,而设置器上没有延迟,因为在引擎盖下面 SetValue() 电话 EnsureFieldCollection() ,如果列表项的字段尚未填充,则必须返回到 SPList 的字段集合。

    此外,这不在代码段中,但请确保您正在处理 SPWeb SPSite 对象。一个好的模式就是使用 using :

    using(SPSite site = new SPSite("url"))
    {
        using(SPWeb web = site.OpenWeb())
        {
            //do stuff
        }
    }
    
        2
  •  0
  •   KoenVosters    15 年前

    首先,我建议利用

    using (SPSite MySite = new SPSite("http://server/"))
    {
       using (SPWeb MyWeb = MySite.OpenWeb())
       {
          //do your stuff here
       }
    }
    

    在更新字段之前,可以通过读取项目的所有字段来检查后续的集合。如果在这之后,第一个字段立即更新,那么您可以肯定这就是原因。

        3
  •  -1
  •   ICR    15 年前

    它可能是发布版本和调试版本之间的差异,也可能是它附加了调试器。尝试更改为发布版本,如果不起作用,请尝试在没有调试器的情况下运行它(在Visual Studio中为ctrl+f5)

    推荐文章