C# 效率及;性能要求

C# 效率及;性能要求,c#,.net,sql,sql-server,wpf,C#,.net,Sql,Sql Server,Wpf,我在用户要填写的表单中有许多文本框,我想检查用户的输入是否存在于数据库中。类似于某些网站在键入用户名时检查用户名的方式。如果数据库中存在后一个用户名,则会将其标记为绿色或带有复选框 在我的例子中,用户必须填写一个完整的表单,其中每个文本框代表一个表中的不同列。检查数据库中是否存在该值的最佳方法是什么?这必须是最快的方法,因为我不能有滞后 这就是我想采用的方法: 在用户开始输入数据之前,将对数据库执行SQL查询,以检索该表中的所有记录(一个简单的SELECT*fromtable)。接下来,这将保存

我在用户要填写的表单中有许多文本框,我想检查用户的输入是否存在于数据库中。类似于某些网站在键入用户名时检查用户名的方式。如果数据库中存在后一个用户名,则会将其标记为绿色或带有复选框

在我的例子中,用户必须填写一个完整的表单,其中每个文本框代表一个表中的不同列。检查数据库中是否存在该值的最佳方法是什么?这必须是最快的方法,因为我不能有滞后

这就是我想采用的方法:

在用户开始输入数据之前,将对数据库执行SQL查询,以检索该表中的所有记录(一个简单的
SELECT*fromtable
)。接下来,这将保存在
数据表中

当用户在文本框中输入文本时(即,相应的文本框未聚焦),将检查表单中的所有文本框,以查看其输入是否存在于数据库中。这可以通过对每个文本框的DataTable运行
LINQ
语句来执行,以查看值是否包含在DataTable中


这种方法有效吗?我希望它尽可能快,任何延迟都是不能容忍的。

如果
表中的行数不太大,那就是我将使用的方法。
如果数字太大,无法合理地保存在内存中,则每次都必须访问数据库。
您可以进行以下优化:

  • 为需要搜索的每列添加索引。请注意,这会增加向该表中添加行所需的时间
  • 仅在数据库中搜索实际更改的文本框
  • 在搜索数据库时,以文本框旁边的小微调器的形式向用户提供视觉反馈

  • 如果
    中的行数不太大,我将使用这种方法。
    如果数字太大,无法合理地保存在内存中,则每次都必须访问数据库。
    您可以进行以下优化:

  • 为需要搜索的每列添加索引。请注意,这会增加向该表中添加行所需的时间
  • 仅在数据库中搜索实际更改的文本框
  • 在搜索数据库时,以文本框旁边的小微调器的形式向用户提供视觉反馈

  • 我建议不要一次检查所有字段。 只要字段被填满,我会考虑缩小数据的方法。

    让我解释一下。假设在
    数据表中有10000条用户记录。在用户完成填写第一个字段(通常为“first Name”)后,请仅使用数据库检查此列(
    SELECT users.firstName FROM table
    ),然后可以根据结果更新数据表(
    SELECT*FROM table WHERE firstName like(“%firstNameField%”)

    您只能对加载了数据的字段执行此操作,这些字段可以为您节省一些额外的时间


    希望您理解这个想法:)

    我建议不要一次检查所有字段。 只要字段被填满,我会考虑缩小数据的方法。

    让我解释一下。假设在
    数据表中有10000条用户记录。在用户完成填写第一个字段(通常为“first Name”)后,请仅使用数据库检查此列(
    SELECT users.firstName FROM table
    ),然后可以根据结果更新数据表(
    SELECT*FROM table WHERE firstName like(“%firstNameField%”)

    您只能对加载了数据的字段执行此操作,这些字段可以为您节省一些额外的时间


    希望您理解这个想法:)

    谢谢您的意见。不幸的是,行的数量是在运行时确定的,因此可能有非常多的行,也可能只有很少的行。此软件可用于任何数据库。不幸的是,第一步不可能,因为应用程序不能修改数据库,只能“读取”数据库。第二种方法很好,但是我如何才能意识到哪些文本框已经改变了呢?为了给问题添加更多的上下文,可以有无限多的文本框,用户可以随意添加这些文本框。因此,情况比标准情况要复杂一些form@DotNET:您知道哪个文本框未聚焦。就是那个改变了的。谢谢你的帮助。我将采用这种方法。虽然仍然查询DataTable而不是数据库不是更好吗?@DotNET:当然,那会更好。但最多只能有一定数量的行。如果超过这个阈值,内存消耗就会太高,而用户响应时间只有很小的提高。只要用户看到正在发生的事情,他们就可以等待一段时间。此外,用户必须等待2秒钟才能验证名字有什么问题?在这段时间里,他可以填写姓氏。谢谢你的意见。不幸的是,行的数量是在运行时确定的,因此可能有非常多的行,也可能只有很少的行。此软件可用于任何数据库。不幸的是,第一步不可能,因为应用程序不能修改数据库,只能“读取”数据库。第二种方法很好,但是我如何才能意识到哪些文本框已经改变了呢?为了给问题添加更多的上下文,可以有无限多的文本框,用户可以随意添加这些文本框。因此,情况比标准情况要复杂一些form@DotNET:您知道哪个文本框未聚焦。