这种情况可能看起来很奇怪,但这就是我必须要做的事情:
情况,我有一个sharepoint门户网站,并且存在这样的问题:在检索用户配置文件时可能存在问题,当很多人在线并且执行这种操作时可能会太慢,所以有一个决定使控制台应用程序测试它。
控制台应用程序需要模拟检索用户配置文件的行为,就像许多不同的用户正在这样做一样。
必须写一个日志。
第一个问题是这种测试是一种真正了解问题所在的好方法吗?
另一个问题是关于我的申请,我有一个奇怪的行为:
public class Program
{
static void Main(string[] args)
{
string filePath = @"C:\Users\User\Desktop\logfile.txt";
string siteUrl = @"http://siteurl";
int threads = 1;
//Multiplicator multiplicator = new Multiplicator(filePath, siteUrl, threads);
//Console.ReadLine();
for (int i = 0; i < 100; i++)
{
Thread t = new Thread(Execute);
t.Start();
}
Console.WriteLine("Main thread: " + Thread.CurrentThread.Name);
// Simultaneously, do something on the main thread.
}
static void Execute()
{
for (int i = 0; i < 100; i++)
{
using (SPSite ospSite = new SPSite(@"http://siteurl"))
{
SPServiceContext serviceContext = SPServiceContext.GetContext(ospSite);
UserProfileManager profileManager = new UserProfileManager(serviceContext);
UserProfile userProfile = profileManager.GetUserProfile("User Name");
string message = "Retrieved: " + userProfile.DisplayName + " on " +DateTime.Now + "by " Thread.CurrentThread.Name;
Console.WriteLine(message);
}
}
}
}
所以问题是我从来没有得到线程的名称为什么? Thread.CurrentThread.Name是空的,是正常的,也许我初始化线程错误?虽然有很多消息来源说它是这样做的?
答案 0 :(得分:3)
您尚未设置主题的名称。您应该在开始之前这样做,如果您愿意,可以在名称中加入迭代编号:
Thread t = new Thread(Execute);
t.Name = "My Thread" + i.ToString();
t.Start();
他们没有自动命名。该名称只能设置一次,之后您将获得InvalidOperationException
顺便说一下,在正常情况下创建100个线程可能不是一个好主意。
答案 1 :(得分:1)
你需要给它一个名字。就在您创建线程时,只需根据i
命名Thread t = new Thread(Execute) { Name = i.ToString() };
答案 2 :(得分:1)
好的,我会回答你的第一个问题。不,有更好的方法可以做到这一点。
这被称为穷人配置文件。它内置于每个Visual Studio中; - )
一般来说,通过分析很容易找到这些问题。甚至还有复杂的工具。