在.net 4.0中并行化Web爬虫的最佳实践

我需要通过代理下载很多页面。 构建multithreadingWeb爬网程序的最佳实践是什么? 是Parallel.For \ Foreach是否足够好还是更适合繁重的CPU任务? 您对以下代码怎么说? var multyProxy = new MultyProxy(); multyProxy.LoadProxyList(); Task[] taskArray = new Task[1000]; for(int i = 0; i { multyProxy.GetPage((string)obj); }, (object)”http://google.com” ); taskArray[i].Start(); } Task.WaitAll(taskArray); 它的工作非常糟糕。 这很慢,我不知道为什么。 这段代码也很糟糕。 System.Threading.Tasks.Parallel.For(0,1000, new System.Threading.Tasks.ParallelOptions(){MaxDegreeOfParallelism=30},loop => { multyProxy.GetPage(“http://google.com”); } ); 好吧,我认为我做错了什么。 当我开始我的脚本时,它只使用2%-4%的网络。

如果autoreset设置为false,我的计时器会自动处理吗?

我在我的应用程序中只启动一次计时器: CustomTimer timer = new CustomTimer(mod); timer.Interval = interval.TotalMilliseconds; timer.AutoReset = false; timer.Start(); 因此AutoReset设置为false。 在计时器结束时,是否会自动调用dispose方法?

Linq表现:(ElementAt,Count)vs(foreach)

我使用(ElementAt,Count)和(foreach)作为Linq查询的结果迭代IEnumerable。 令我惊讶的是,性能差异是25-30倍! 这是为什么? IEnumerable result = … simple Linq query that joins two tables … returns about 600 items double total = 0; // Method 1: iterate with Count and ElementAt for( int i = 0; i < result.Count(); i++ ) { total += result.ElementAt(i); } // Method 2: iterate with foreach foreach( double value […]

如何通过保留方法名来扩展接口?

给出两个接口: interface I1 { int Foo(); } interface I2 { void Foo(); } 一堂课: class Test : I1, I2 { int I1.Foo() { Console.WriteLine(“I1.Foo”); return default(int); } public void Foo() { Console.WriteLine(“I2.Foo”); } } 如何通过保持名为Foo的方法将接口I2扩展为I1 ? 我尝试了以下代码,但它没有编译: interface I1 { int Foo(); } interface I2 : I1 { void I2.Foo(); } class Test : I2 […]

如何在XAML中制作无线电盒(Xamarin Forms PCL)

我试图找出如何在XAML中制作一个单选按钮 – 我看到有一种方法可以在android中进行,但是想知道是否有一种简单的跨平台方式来做它而不需要额外的nuget包。

在Xamarin Studio中打开Visual Studio项目时,“版本字符串部分太短或太长”

我尝试在Xamarin工作室社区中打开VS 2012的解决方案,但其中一个项目–asp.net mvc项目 – 给出了“版本字符串部分太短或太长” 我认为.net版本还可以。 我尝试在VS中创建简单的asp.net mvc项目,然后在XS中打开它,一切都很顺利。 所以我不知道在这种情况下有什么问题。 我找到了删除线条的解决方案 VisualStudioVersion = {0} MinimumVisualStudioVersion = {0} 适用于此,但不是我的情况。

如何使用.Net读取.cds数据库(TClientDataSet)

我有一个用Delphi编写的应用程序的旧数据库文件。 我的任务是提取数据,并将其移动到SQL数据库。 我知道它是.cds格式,它使用Delphi的TClientDataSet-Class。 问题是:我没有Delphi,没有文档,多年前编写应用程序的人离开了公司。 所以,我的问题是:有没有办法(除了Delphi或文本解析)使用Dot.net,Python,Ruby,Java或Perl访问数据? 对XML或CSV的简单“导出”也会起作用。

unit testingXNA:我需要模拟我的GraphicsDevice

我在使用XNA框架。 为了帮助我,我做了一个看起来像这样的帮助类: ActorHolder + SpriteBatch (SpriteBatch) + ContentManager (ContentManager) – drawables (IList) – updatables (IList) + ActorHolder(GraphicsDevice, ContentManager) + Draw(GameTime) + Update(GameTime) + AddActor(IActor) + RemoveActor(IActor) + GetCollidingActors(IActor) 现在我想对这个class级进行unit testing。 但是当你看到我的构造函数需要一个图形设备和一个内容管理器。 虽然我认为这在我的应用程序中很明显,但在我的测试中却没有。 我应该嘲笑这两个只是为了进行unit testing还是我的设计存在缺陷? –UPDATE– 我找到了一个可能有用的项目的链接: http : //scurvytest.codeplex.com/没有任何xp,因为编码必须为社交生活腾出空间。 – 注意 – 对不起,我的UML法语,我的公司不使用它,所以我从来没有使用它,除了回到学校。

列表跨Web服务变为Country

我有一个Web服务,在调用时,返回一个多态包含List的Result对象。 但是,当我在客户端应用程序中添加引用时,公共字段将成为客户端应用程序中的Country数组。 如何将客户端应用程序中的字段更改为List? public Result GetCountryList() { List countries = GrabCountryList(); Result result = new Result(); result.theResult = countries; } 这是公共财产 public object theResult { get {return _theResult; } set {_theResult = value;} } Mehmet Aras的公认接受的答案 : 右键单击服务引用,然后选择“配置引用”。 在Collection type下,选择System.Collection.Generic.List。 更新服务参考,应该是好的。 感谢Matt Hamilton提出的从arrays创建新列表的建议。

表格/窗口后面出现的工具提示! (C#/ VS 2008)

出于一些奇怪的原因,我在VS 2008 C#winforms应用程序中的toopltip显示在表单后面! 这非常令人沮丧,我无法弄清楚我应该做些什么。 以前有人面对这个吗? 想法? (PS – 我在表单中以编程方式执行toolstip.show)