3

特定のサイトをスクレイピングして ID を収集するマルチスレッド プログラムを作成しています。List<string>これらの ID を共有静的オブジェクトに格納しています。

アイテムが に追加されると、まず、既に収集された ID のブラックリストを含むList<string>に対してチェックされます。HashSet<string>

私は次のようにこれを行います:

private static HashSet<string> Blacklist = new HashSet<string>();
private static List<string> IDList = new List<string>();

public static void AddIDToIDList(string ID)
{
    lock (IDList)
    {
        if (IsIDBlacklisted(ID))
            return;
        IDList.Add(ID);
    }
}
public static bool IsIDBlacklisted(string ID)
{
    lock (Blacklist)
    {
        if (Blacklist.Contains(ID))
            return true;
    }
    return false;
 }

ブラックリストは終了後にファイルに保存され、プログラムが開始されるたびにロードされるため、時間の経過とともにかなり大きくなります (最大 50k レコード)。このブラックリストを保存するだけでなく、各 ID をチェックするより効率的な方法はありますか?

ありがとう!

4

4 に答える 4