我有一些HTML:
<h2>Results</h2>
<div class="box">
<table class="tFormat">
<th>Head</th>
<tr>1</tr>
</table>
</div>
<h2>Grades</h2>
<div class="box">
<table class="tFormat">
<th>Head</th>
<tr>1</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
我想知道如何在"结果"下获得该表
我试过了:
var nodes = doc.DocumentNode.SelectNodes("//h2");
foreach (var o in nodes)
{
if (o.InnerText.Equals("Results"))
{
foreach (var c in o.SelectNodes("//table"))
{
Console.WriteLine(c.InnerText);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,但它也获得了Grades h2下的表格
我有一个大约 10 GB 的文本文件,包含 5000 万行。对于文件中的每一行,如果记录尚不存在,我将插入该记录,否则将与现有记录的 ID 和当前行 ID 进行比较,如果当前 ID 小于记录 ID,则更新。
目前,插入/比较记录大约需要8个小时
文本文件中的示例数据:
Md5,Id
d41d8cd98f00b204e9800998ecf8427e,1000
e358efa489f58062f10dd7316b65649e,1001
626726e60bd1215f36719a308a25b798,1002
d41d8cd98f00b204e9800998ecf8427e,5002
d41d8cd98f00b204e9800998ecf8427e,0953
626726e60bd1215f36719a308a25b798,0152
Run Code Online (Sandbox Code Playgroud)
我尝试过实现生产者/消费者模式,但生产者速度太快并消耗大量内存,导致 OutOfMemory 异常。
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
int lineCount = 0;
foreach(var f in File.ReadLines(@"big_text_file.txt").Skip(1))
{
lineCount++;
string[] lines = null;
lines = f.Split(",")
if (!db.KeyExists(lines[2]))
{
db.StringSet(lines[2], lines[0]);
}else //contains key
{
var keypair = db.StringGet(lines[2]);
if(Convert.ToInt32(lines[0]) < Convert.ToInt32(keypair))
{
db.StringSet(lines[2], lines[0]);
}
}
Run Code Online (Sandbox Code Playgroud)