我正在用C#创建一个聊天应用程序,客户端可以在其中进行私人聊天,但是我正在努力根据数据库(sql-server)中的更改来更新消息。
我应该创建一个持续运行的线程,该线程在输出最后一个消息ID之后请求数据吗?我认为这可能效率不高,还有其他方法吗?还是可以推荐一种更好的方法?
public void Display_Messages(dynamic listbox, int conversation_id)
{
Connection _connection = new Connection();
_connection.conn.Open();
string sql = "SELECT userId, text, messageId FROM message WHERE conversationId =" + conversation_id + ";"; // Update Later to use PS
dynamic command = new SqlCommand(sql, _connection.conn);
dynamic data_reader = command.ExecuteReader();
while (data_reader.Read())
{
listbox.Items.Add(data_reader.GetValue(0) +":"+data_reader.GetValue(1));
}
data_reader.Close(); command.Dispose(); _connection.conn.Close();
}
您可以使用SQL Server的broker service
来通知您的自定义数据更改,但是出于性能方面的考虑,侦听器上不得有太多的侦听器。轮询机制通常效率不高,即使没有新数据要通知,也会给系统带来恒定的负载。您可以找到在线使用broker service
所需的所有信息。