c# - 我应该为此使用线程吗?
问题描述
我目前正在开发一个销售点程序,该程序可能被许多使用同一本地数据库的计算机使用。
我问以下问题是因为现在我已经设置好了所有东西,所以一次只有一台计算机使用该程序,这实际上是幼稚的。但是,我也想知道在此上实现诸如线程和锁之类的东西对我来说是否真的可行,或者我是否只是浪费时间和宝贵的资源。
谁能告诉我?谢谢!我将添加一个可能由不同进程运行的摘录代码:
private void PuntoDeVenta_Load(object sender, EventArgs e)
{
//Connect to the local database and check if we successfully connected.
conn = new ConexionBD();
if (!conn.conectar())
{
MessageBox.Show("Hubo un error al conectarse a la base de datos. Favor de verificar.", "Error", MessageBoxButtons.OK);
this.Close();
}
comboBox1.SelectedIndex = 0;
groupBox3.Enabled = false;
this.KeyUp += new System.Windows.Forms.KeyEventHandler(KeyEvent);
string[] detalle = conn.informacionEmpresa();
iva = Convert.ToInt16(detalle[10]);
label15.Text = "Impuesto (" + iva + "%):";
//Get the highest order number until now. Not sure if I need to use Thread here.
String maxPedido = conn.detalleNumeroPedidoMasReciente();
int n;
if (int.TryParse(maxPedido, out n))
{
maxPedido = (n + 1).ToString();
}
else
{
n = Convert.ToInt32(Regex.Match(maxPedido, @"\d+").Value);
String nonNumeric = String.Concat(maxPedido.Where(c => !Char.IsDigit(c)));
maxPedido = nonNumeric + (n + 1).ToString();
}
textBox1.Text = maxPedido;
}
解决方案
以您考虑为企业雇用工人的方式考虑线程。您什么时候为企业雇用工人?只有当你有很多工作要他们做时,因为招聘很昂贵。
理想情况下,您应该仅在满足以下条件时才创建新线程:
- 要做的工作是 CPU 密集型的
- 这项工作很长——肯定超过 30 毫秒,更像是几秒钟或几分钟的工作。
- 有一个空闲的 CPU 可以 100% 专用于为该线程提供服务。
在您的情况下,您似乎正在考虑雇用一名工作人员来运行数据库查询。好吧,你会为你的企业雇佣一个工人,他唯一的工作就是只发一封信,然后付钱让他们在等待回复的时候睡觉吗?当然不是。因此,也不要雇用线程来执行此操作。如果您有高延迟的工作要做且不受 CPU 限制,请在单个线程上创建异步工作流。
异步工作流不会雇用新的工作人员。相反,这就像您发送一封信,在等待回复到达时,您会发现其他工作要做,从而有效地利用您的时间。当回复到达时,您会从上次中断的地方开始“信件工作流程”。
推荐阅读
- python - 如何使用 csv 文件中的 URL 列表使用 python selenium 持续进行网络抓取
- couchdb - couchDB的json结构中的项目ID名称或项目内的ID,最佳性能?
- angular - 如何以角度发送类似邮递员的应用程序/x-www-form-urlencoded 发布请求
- java - 在 Junit 测试 Hibernate 之前和之后运行测试插入脚本
- java - 在巨大的 Windows 目录树中查找文件列表的最快方法
- vb.net - 如何在指定站点 URL 的 PictureBox 中显示网站的 Favicon
- java - 根据泛型类型设计需要重载的 API 有哪些可能性?
- bootstrap-4 - 为什么 Tooltip 样式在 Bootstrap 4 中不起作用,但在 Bootstrap 3 中起作用?
- java - 如何将数据从每个活动传递到另一个活动?
- java - 将泛型参数限制为 Java 中的不同类型