我曾经在.NET中编写了一个Crawler.为了提高其可伸缩性,我尝试利用.NET的异步API.
System.Net.HttpWebRequest具有异步API BeginGetResponse/EndGetResponse.但是,这对API只是为了获取HTTP响应头和Stream实例,我们可以从中提取HTTP响应内容.所以,我的策略是使用BeginGetResponse/EndGetResponse来异步获取响应Stream,然后使用BeginRead/EndRead从响应Stream实例异步获取字节.
在Crawler进行压力测试之前,一切看起来都很完美.在压力测试下,Crawler遭受高内存使用.我用WinDbg + SoS检查了内存,并说明System.Threading.OverlappedData实例有很多字节数组.经过一些互联网搜索后,我从微软发现了这个KB http://support.microsoft.com/kb/947862.
根据KB,异步I/O的数量应该具有"上限",但它不会告诉"建议的"绑定值.所以,在我看来,这个KB没有任何帮助.这显然是一个.NET错误.最后,我不得不放弃从响应Stream中异步提取字节的想法,而只是以同步方式进行.
允许带有点网络套接字的异步IO的.NET库(Socket.BeginSend/Socket.BeginReceive/NetworkStream.BeginRead/NetworkStream.BeginWrite)必须具有其异步IO的未完成缓冲区(发送或接收)数量的上限.
网络应用程序应该具有其发布的未完成异步IO 数量的上限 .
编辑:添加一些问号.
任何人都有在Socket和NetworkStream上进行异步I/O的经验吗?一般来说,生产中的爬虫是否通过同步或异步的互联网进行I/O操作?
我有几个std::vector,全长相同.我想对这些向量中的一个进行排序,并将相同的变换应用于所有其他向量.这样做有一个简洁的方法吗?(最好使用STL或Boost)?一些向量包含ints,其中一些包含std::strings.
伪代码:
std::vector<int> Index = { 3, 1, 2 };
std::vector<std::string> Values = { "Third", "First", "Second" };
Transformation = sort(Index);
Index is now { 1, 2, 3};
... magic happens as Transformation is applied to Values ...
Values are now { "First", "Second", "Third" };
Run Code Online (Sandbox Code Playgroud) 我希望能够将预先格式化的文本(即包含换行符)放入FitNesse夹具表的单个单元格中.有没有办法操纵FitNesse wiki标记来做到这一点?
前几天有人通过电子邮件向我询问了一个关于整数分区的问题(因为我发布了一个Perl模块,Integer :: Partition来生成它们),我无法回答.
背景:这里是7的所有整数分区(每行的总和等于7).
7
6 1
5 2
5 1 1
4 3
4 2 1
4 1 1 1
3 3 1
3 2 2
3 2 1 1
3 1 1 1 1
2 2 2 1
2 2 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
现在,如果我们查看每个分区的长度并计算每个分区的长度:
1 1
2 3
3 4
4 3
5 2
6 1
7 1
Run Code Online (Sandbox Code Playgroud)
...我们看到一个分区的长度为1(7),一个分区的长度为7(1 1 1 1 1 1 1).有4个分区长度为3:(5 …
我有一个带div <h1>标签的div,没有边距.如果我定义任何doctype,div上方会出现一个空格.
如果我删除<h1>标签,或删除doctype定义,则没有空间(应该有.为什么?
示例HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style>
body {
margin:0
}
#thediv {
background-color:green
}
</style>
</head>
<body>
<div id="thediv">
<h1>test</h1>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
问题是绿色div上方的空间,移除DOCTYPE并且空间消失,将<h1>标签更改为 <b>,空间也消失.它适用于任何doctype(XHTML/HTML,严格/过渡/等)
几乎在所有浏览器中都有用(使用http://browsershots.org).有趣的是,似乎唯一正确显示它的浏览器是Internet Explorer 6.0 ..
让抽象类定义实例变量是一种好习惯吗?
public abstract class ExternalScript extends Script {
String source;
public abstract void setSource(String file);
public abstract String getSource();
}
Run Code Online (Sandbox Code Playgroud)
然后子类ExternalJavaScript.class将自动获取源变量,但是如果所有子类本身都定义了源代码而不是继承,我觉得读代码更容易.
你有什么建议?
/亚当
Windows窗体中是否有正确的方法来刷新标题栏而不必放到P /调用FlashWindow?
我使用.NET 2.0是出于兼容性和大小的原因,所以也许我只是错过了这个方法,因为它是在较新版本的.NET框架中.
我应该如何为我的应用程序选择IPv4多播地址?我可能需要多个(最终可能是整个范围),但只是想避免与其他应用程序冲突.
想法请:)
目前我刚从"本地使用"空间分配了一个任意的空间,239.255.42.99
我有一个选择查询,当前产生以下结果:
Description Code Price
Product 1 A 5
Product 1 B 4
Product 1 C 2
Run Code Online (Sandbox Code Playgroud)
使用以下查询:
SELECT DISTINCT np.Description, p.promotionalCode, p.Price
FROM Price AS p INNER JOIN
nProduct AS np ON p.nProduct = np.Id
Run Code Online (Sandbox Code Playgroud)
我想生产以下内容:
Description A B C
Product 1 5 4 2
Run Code Online (Sandbox Code Playgroud) 我有一个SQLite表,其中包含各种产品的价格.它是一个快照表,因此它包含5分钟间隔的价格.我想写一个查询,将每个项目的价格差异从一行返回到下一行.
列是id(自动公司),record_id(产品的ID),价格(该时间点的价格),时间(自纪元以来仅几秒)
我正在尝试返回一个"差异"列,其中包含间隔之间的差异值.
Given the following id record_id price time 1 apple001 36.00 ... 67 apple001 37.87 ... 765 apple001 45.82 ... 892 apple001 26.76 ... I'd like it to return id record_id price time difference 1 apple001 36.00 ... 0 67 apple001 37.87 ... 1.87 765 apple001 45.82 ... 7.95 892 apple001 26.76 ... -19.06
是否可以使用SQLite?
其次,如果可能的话 - 是否有办法将其限制在最后5个左右的记录中?
我很感激任何帮助,谢谢.
只想添加一些东西.我已经找到了在其他数据库中这样做的方法,但我使用的是XULRunner,因此也就是SQLite.这就是我正在使用它的原因.
第二个问题可能需要澄清,我希望按时间顺序排序并分析最后5条记录.如果需要,这是我可以单独解决的问题.
这是一个MySQL 解决方案,有点像.这是我正朝着的方向,但交易破坏者是"如果表格包含一个序列列,但有间隙,重新编号.如果表格中没有这样的列,请添加一个".根据设计,这种情况存在差距,因为有许多记录一次更新而且不会按顺序更新.
.net ×2
sql ×2
.net-2.0 ×1
abstract ×1
boost ×1
c# ×1
c++ ×1
class ×1
css ×1
equation ×1
fitnesse ×1
html ×1
integer ×1
ipv4 ×1
java ×1
limit ×1
multicast ×1
networking ×1
perl ×1
select ×1
sockets ×1
sorting ×1
sqlite ×1
stl ×1
stream ×1
udp ×1
variables ×1
vector ×1
web-crawler ×1
winapi ×1
xulrunner ×1