我正在编写一个事件处理程序,在ItemAdded上检查是否存在某个站点,然后使用给定的URL或备用URL创建一个站点。我已经写了类似的东西,但我试图清理我的代码为网站存在检查下面的方法。
private string CheckSiteExists(SPWeb web, string siteURL, string webURL)
{
//Counter for our alternate URL
int i = 0;
//Open original URL
SPWeb tempweb = web.Site.OpenWeb(webURL + "/" + siteURL);
//Check if site exists
if (tempweb.Exists == false)
{
do
{
i++;
tempweb = web.Site.OpenWeb(webURL + "/" + siteURL + "_" + i);
}
while (tempweb.Exists == false);
//Dispose of our web
tempweb.Dispose();
}
else
{
tempweb.Dispose();
//If site does not exist, return original URL
return siteURL;
}
//If site does exist, return original url plus counter
return siteURL + "_" + i;
}
我决定测试我拥有的东西,发现w3wp从0%的CPU使用率变为50-80%并一直呆在那里直到我手动杀死它。我猜我做的while声明并没有像我认为的那样表现,它只是循环到无限。
答案 0 :(得分:1)
此代码似乎是找到第一个与确实存在的Web匹配的URL,而不是第一个匹配不存在的Web:
tempweb.Exists == false
而不是== true
tempweb.Exists
为真后才处理并返回网址。如果不存在网络,这将陷入很长的循环。