当前位置:编程学习 > C#/ASP.NET >>

一运行程序CUP马上飙到60%,而且程序动不了,请教高手

if (sbFriends.Groups[1].Items.Count < 1)
                        {
                            reader = DBHelper.GetReader(string.Format("select * from users where id={0}", fromUserId[w]));
                            if (reader.Read())
                            {
                                SbItem item = new SbItem(Convert.ToString(reader["NickName"]),
                                Convert.ToInt32(reader["FaceId"]));
                                item.Tag = Convert.ToInt32(reader["id"]);
                                sbFriends.Groups[1].Items.Add(item);
                            }
                            reader.Close();
                            DBHelper.Close();
                        }
                        else
                        {
                            for (int i = 0; i < sbFriends.Groups[1].Items.Count; i++)
                            {
                                if (Convert.ToInt32(sbFriends.Groups[1].Items[i].Tag) == fromUserId[w])
                                {
                                    reader = DBHelper.GetReader(string.Format("select * from users where id={0}", fromUserId[w]));
                                    if (reader.Read())
                                    {
                                        SbItem item = new SbItem(Convert.ToString(reader["NickName"]),
                                        Convert.ToInt32(reader["FaceId"]));
                                        item.Tag = Convert.ToInt32(reader["id"]);
                                        sbFriends.Groups[1].Items.Add(item);
                                    }
                                    reader.Close();
                                    DBHelper.Close();
                                }
                            }
                        }

只要注释掉一个IF条件就不卡了,怎么回事 --------------------编程问答-------------------- for (int i = 0; i < sbFriends.Groups[1].Items.Count; i++)
  {
  if (Convert.ToInt32(sbFriends.Groups[1].Items[i].Tag) == fromUserId[w])
  {
  reader = DBHelper.GetReader(string.Format("select * from users where id={0}", fromUserId[w]));
  if (reader.Read())
  {
  SbItem item = new SbItem(Convert.ToString(reader["NickName"]),
  Convert.ToInt32(reader["FaceId"]));
  item.Tag = Convert.ToInt32(reader["id"]);
  sbFriends.Groups[1].Items.Add(item);
  }
  reader.Close();
  DBHelper.Close();
  }
你看你是循环操作数据库了!

    这要1秒链接N次数据库,当然慢了!

    不要这样写! --------------------编程问答-------------------- for (int i = 0; i < sbFriends.Groups[1].Items.Count; i++)
  {
  if (Convert.ToInt32(sbFriends.Groups[1].Items[i].Tag) == fromUserId[w])
  {
  reader = DBHelper.GetReader(string.Format("select * from users where id={0}", fromUserId[w]));
  if (reader.Read())
  {
  SbItem item = new SbItem(Convert.ToString(reader["NickName"]),
  Convert.ToInt32(reader["FaceId"]));
  item.Tag = Convert.ToInt32(reader["id"]);
  sbFriends.Groups[1].Items.Add(item); //这里还是向你循环的sbFriends.Groups[1].Items增加,明显的死循环
  }
  reader.Close();
  DBHelper.Close();
--------------------编程问答-------------------- 不信把下面的这段代码,做为你的简版,随便写一个应用程序,自己加断点看看,不死机我就不用写代码了
List<string> list = new List<string>();
            list.Add("1");

            for (int i = 0; i < list.Count; i++)
            {
                list.Add(i.ToString());
            }
--------------------编程问答--------------------   你把读取数据库的代码写到了 循环里面去了。 
  
    if (reader.Read())
  {
  SbItem item = new SbItem(Convert.ToString(reader["NickName"]),
  Convert.ToInt32(reader["FaceId"]));
  item.Tag = Convert.ToInt32(reader["id"]);
  sbFriends.Groups[1].Items.Add(item);
  }

  在这里 每次你也只能取出来一条数据。  应该是把if改成while吧

   这样两层循环的话 速度就更慢了 可以考虑换一种方式来做 --------------------编程问答--------------------
引用 1 楼 adsdassadfasdfasdf 的回复:
for (int i = 0; i < sbFriends.Groups[1].Items.Count; i++)
  {
  if (Convert.ToInt32(sbFriends.Groups[1].Items[i].Tag) == fromUserId[w])
  {
  reader = DBHelper.GetReader(string.Format("select * f……


2楼请问这里哪里是死循环?  我就没看出来。
这个是向第一个组的items添加吧   --------------------编程问答-------------------- 同意Fibona的说法 --------------------编程问答--------------------  对的 就是死循环读取数据库。。没得法了。。Fibona说易做图确
俺没看上面  瓜了一盘 --------------------编程问答-------------------- F11单步是否存在死循环
--------------------编程问答-------------------- 如果是因为for里面连接数据库比较慢,不如在for外面一次把那个表都取出来,然后循环数据,不用再查数据库了 --------------------编程问答-------------------- 我先不管你的代码是否有错误,首先让它不要影响系统:

for (int i = 0; i < sbFriends.Groups[1].Items.Count; i++)
  {

这句替换成:
int _Count = sbFriends.Groups[1].Items.Count;
for (int i = 0; i < _Count ; i++)
{
    Application.DoEvents();
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,