重载和线程名称的多线程为空

时间:2012-01-31 20:44:57

标签: c# multithreading

这种情况可能看起来很奇怪,但这就是我必须要做的事情:

情况,我有一个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是空的,是正常的,也许我初始化线程错误?虽然有很多消息来源说它是这样做的?

3 个答案:

答案 0 :(得分:3)

您尚未设置主题的名称。您应该在开始之前这样做,如果您愿意,可以在名称中加入迭代编号:

Thread t = new Thread(Execute);
t.Name = "My Thread" + i.ToString();
t.Start();

他们没有自动命名。该名称只能设置一次,之后您将获得InvalidOperationException

MSDN Reference: Thread.Name

顺便说一下,在正常情况下创建100个线程可能不是一个好主意。

答案 1 :(得分:1)

你需要给它一个名字。就在您创建线程时,只需根据i

命名
Thread t = new Thread(Execute) { Name = i.ToString() };

答案 2 :(得分:1)

好的,我会回答你的第一个问题。不,有更好的方法可以做到这一点。

  1. 将网站置于负载状态。也许朋友可以一直按F5,或者你运行1000行卷曲的批处理文件
  2. 将Visual Studio调试器附加到Web服务器进程
  3. 打破10次,看看它大部分时间停在哪里。那是你的热点/问题。
  4. 这被称为穷人配置文件。它内置于每个Visual Studio中; - )

    一般来说,通过分析很容易找到这些问题。甚至还有复杂的工具。