C# 开始,然后将列表与数据库中的内容进行比较。。由于您没有提到在比较数据之前对数据进行清理,您可以展示一些您使用的代码,这将使您更容易获得一些提示。您使用DataTable作为开始的原因是什么?听起来您应该只使用哈希集,并在从数据库中读取时添加到它,而不使用数

C# 开始,然后将列表与数据库中的内容进行比较。。由于您没有提到在比较数据之前对数据进行清理,您可以展示一些您使用的代码,这将使您更容易获得一些提示。您使用DataTable作为开始的原因是什么?听起来您应该只使用哈希集,并在从数据库中读取时添加到它,而不使用数,c#,algorithm,performance,linq,datatable,C#,Algorithm,Performance,Linq,Datatable,开始,然后将列表与数据库中的内容进行比较。。由于您没有提到在比较数据之前对数据进行清理,您可以展示一些您使用的代码,这将使您更容易获得一些提示。您使用DataTable作为开始的原因是什么?听起来您应该只使用哈希集,并在从数据库中读取时添加到它,而不使用数据表。可能最有效的方法是在数据库中进行筛选,而不是先将所有内容加载到内存中。此表是否只有一列,然后使用字符串.Split或它是否有多列,每列代表一个单词?告诉我们更多关于模式和您尝试过的内容,展示一些代码。听起来您需要在开始之前获得唯一的单词列



开始,然后将列表与数据库中的内容进行比较。。由于您没有提到在比较数据之前对数据进行清理,您可以展示一些您使用的代码,这将使您更容易获得一些提示。您使用
DataTable
作为开始的原因是什么?听起来您应该只使用
哈希集
,并在从数据库中读取时添加到它,而不使用
数据表
。可能最有效的方法是在数据库中进行筛选,而不是先将所有内容加载到内存中。此表是否只有一列,然后使用
字符串.Split
或它是否有多列,每列代表一个单词?告诉我们更多关于模式和您尝试过的内容,展示一些代码。听起来您需要在开始之前获得唯一的单词列表,然后将列表与数据库中的内容进行比较。。由于您在比较之前没有提到清理数据,Datatable有任何特殊功能,如排序?@ÖnderÖretmen,我在Google上进行了快速搜索,但没有找到在Datatable中实现的二进制搜索功能。您明确希望Datatable优于List有什么原因吗?为什么要使用二进制搜索而不是
哈希集
?@JonSkeet确实,哈希集更快,但作者可能更难理解和使用,所以正如我在回答中所说,“一件基本的事情是……”。2.000.000不是一个很大的数字,因此哈希集是必需的。hash函数在使用hashset时起着非常重要的作用。它比创建一个列表,对其进行排序,然后使用
BinarySearch
更容易使用。。。它也明显更快。200万个条目就足够了,你真的希望每次插入都是O(1)而不是O(logn)。DataTable有任何特殊功能,比如排序?@underğretmen我在Google上进行了快速搜索,但没有找到在DataTable中实现的二进制搜索功能。您明确希望Datatable优于List有什么原因吗?为什么要使用二进制搜索而不是
哈希集
?@JonSkeet确实,哈希集更快,但作者可能更难理解和使用,所以正如我在回答中所说,“一件基本的事情是……”。2.000.000不是一个很大的数字,因此哈希集是必需的。hash函数在使用hashset时起着非常重要的作用。它比创建一个列表,对其进行排序,然后使用
BinarySearch
更容易使用。。。它也明显更快。200万条输入就足够了,你真的希望每次插入都是O(1)而不是O(logn)。基本原则是想法的提出者。基本原则是想法的提出者。
        DataTable dtProducts = getProducts();
        bool contains;
        string[] keys;

        dt.Columns.Add("keyword", typeof(string));

        for (int i = 0; i < dtProducts.Rows.Count; i++) //114040
        {
            keys = GetWords(dtProducts.Rows[i]["name"].ToString().Trim());

            foreach (string key in keys)
            {
                DataRow dr = dt.NewRow();
                dr["keyword"] = key;

                contains = dt.AsEnumerable().Any(row => key == row.Field<string>("keyword"));

                if (!contains)
                {
                    dt.Rows.Add(dr);
                }
            }
        }
private static readonly char[] WordSeparator = { ' ', '\t', ',', '.', ':' }; // to be continued
// ....


HashSet<string> allUniqueWords = new HashSet<string>();
using (var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
using (var cmd = new SqlCommand("SELECT DISTINCT ColumnName FROM dbo.TableName", con))
{
    con.Open();
    using (var rd = cmd.ExecuteReader())
    {
        string[] words = rd.GetString(0).Split(WordSeparator, StringSplitOptions.RemoveEmptyEntries);
        foreach (string word in words)
            allUniqueWords.Add(word);
    }
}
        var sampleResults = from DataRow sampleRow in dataTableLocal.AsEnumerable()
                            where sampleRow.Field<string>("FirstColumn") == symbolName
                            select sampleRow;

        Parallel.ForEach(sampleResults, sampleRow =>
        {
            string sval = sampleRow["SecondColumn"].ToString();
        });