一运行程序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吧
这样两层循环的话 速度就更慢了 可以考虑换一种方式来做 --------------------编程问答--------------------
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#