Moo*_*Moo 0 .net c# sharepoint wss sharepoint-2007
我通过与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();
}
Run Code Online (Sandbox Code Playgroud)
我在"分配标题值"和"分配标题值"之间暂停了几秒钟.
当我将代码部署为Web部件时,它的瞬间延迟似乎只是在将代码部署为控制台应用程序时.
编辑:更多信息!当我分配了多个字段时,它始终是第一个缓慢的字段,任何后续分配都与预期的一样快.如果我切换字段的顺序,它对延迟没有影响 - 第一个字段总是很慢.
有什么想法吗?
看起来这是因为在使用setter之前你没有访问任何字段.如果您首先读取至少一个字段,那么您可能会看到稍微延迟,并且设置器没有延迟,因为在引擎盖SetValue()
调用下EnsureFieldCollection()
,如果列表项的字段尚未填充,则必须回到SPList
'field字段集.
此外,这不在您的代码段中,但请确保在完成后处理您的SPWeb
和SPSite
对象.一个好的模式是使用using
:
using(SPSite site = new SPSite("url"))
{
using(SPWeb web = site.OpenWeb())
{
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)