Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实时股票报价、StreamReader性能优化_C# - Fatal编程技术网

C# 实时股票报价、StreamReader性能优化

C# 实时股票报价、StreamReader性能优化,c#,C#,我正在做一个程序,从一个网站上提取900多只股票的实时报价。我使用HttpWebRequest向站点发送HTTP请求,然后 存储对流的响应并使用以下代码打开流: HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream (); StreamReader reader = new StreamReader( stream ) 收到的H

我正在做一个程序,从一个网站上提取900多只股票的实时报价。我使用HttpWebRequest向站点发送HTTP请求,然后 存储对流的响应并使用以下代码打开流:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream ();
StreamReader reader = new  StreamReader( stream )
收到的HTML的大小很大(5000多行),因此解析它和提取价格需要很长时间。对于900个文件, 解析和提取大约需要6分钟。我的老板对此不满意,他告诉我他希望整个过程在两分钟内完成

我已经确定了程序中需要花费大部分时间才能完成的部分是解析和提取。我试图优化代码,使其更快,下面是 经过一些优化后,我现在拥有:

// skip lines at the top
for(int i=0;i<1500;++i) 
  reader.ReadLine();

// read the line that contains the price 
string theLine = reader.ReadLine();  

// ... extract the price from the line
//跳过顶部的行

对于(inti=0;i
for)(inti=0;i
for)(inti=0;i我用股票报价做了一段时间的HTML屏幕抓取,但我发现雅虎提供了一个非常简单的web服务,比加载网站要好得多

使用此服务,您可以在一个请求中请求最多100个股票报价,并返回csv格式的响应,每个符号一行。您可以在请求的查询字符串中设置要返回的列。我构建了一个小程序,每天查询一次股票市场中的每只股票的服务,以获取价格。它似乎对我来说效果很好,而且比访问网站获取数据要快得多

查询字符串的一个例子是

它返回


“通用电气公司”,32.98,“6月26日”,“21.30-32.98”,“纽约证券交易所”,2.66,“7月25日”,“28.55”,“7月3日”,“-0.21%”

我用股票报价做了一段时间的HTML屏幕抓取,但我发现雅虎提供了一个非常简单的web服务,比加载网站要好得多

使用此服务,您可以在一个请求中请求最多100个股票报价,并返回csv格式的响应,每个符号一行。您可以在请求的查询字符串中设置要返回的列。我构建了一个小程序,每天查询一次股票市场中的每只股票的服务,以获取价格。它似乎对我来说效果很好,而且比访问网站获取数据要快得多

查询字符串的一个例子是

它返回


“通用电气公司”,32.98,“6月26日”,“21.30-32.98”,“纽约证券交易所”,2.66,“7月25日”,“28.55”,“7月3日”,“-0.21%。”

很难看出这是怎么回事,StreamReader与HttpWebRequest相比速度惊人。一些基本假设:假设您正在下载900个文件,其中5000行,每行在6分钟内下载100个字符。这意味着您需要下载900 x 5000 x 100=450兆字节。在6分钟内,这需要450E6/6/60*8=10 Mbps的带宽。

你有什么?10 Mbps对于高速互联网服务来说是典型的,尽管你需要一台能够维持这一速度的服务器。要将速度降低到2秒,你需要将你的服务升级到30 Mbps。你的老板可以解决这个问题


关于您看到的速度提升:注意缓存。

很难看出这是怎么可能的,StreamReader比HttpWebRequest快得惊人。一些基本假设:假设您在6分钟内下载900个文件,每个文件包含5000行,100个字符。这意味着您需要在6分钟内下载900 x 5000 x 100=450兆字节s、 这需要450E6/6/60*8=10Mbps的带宽

你有什么?10 Mbps对于高速互联网服务来说是典型的,尽管你需要一台能够维持这一速度的服务器。要将速度降低到2秒,你需要将你的服务升级到30 Mbps。你的老板可以解决这个问题


关于您所看到的速度改进:注意缓存。

如果您确实需要快速获取实时数据,那么您应该订阅数据源,而不是从站点上删除它们

或者,是否有一些令牌可供您搜索以找到所需的字段/数据对


4分钟读900个文件听起来太长了。

如果你真的需要快速获取实时数据,那么你应该订阅数据源,而不是从网站上删除它们

或者,是否有一些令牌可供您搜索以找到所需的字段/数据对


在900个文件中读4分钟听起来很荒谬。

不知道你在文件上做了什么处理或者它是什么格式。更多的代码可能会帮助我们。我会考虑多线程,这样一个线程正在读取文件,另一个线程正在读取内容并处理它们。我不喜欢for i=0。到1500循环。你能提供多一点信息或代码吗?你真的应该一次读取所有数据,而不是一行一行。而且,当我们不知道数据是什么样子,以及你解析所述数据的代码也是什么样子时,很难提供帮助。请发布这些信息,我将非常乐意提供帮助。谢谢各位,但我勉强做到了下面是Paul Mendoza建议的基于Web服务的方法。对于同一个应用程序,我可能还有其他问题。希望你将来能看到我的帖子。不知道你对文件的处理方式或格式。更多的代码可能会帮助我们。我会考虑多线程,这样一个线程正在读取文件,另一个线程正在读取内容并处理它们。我不喜欢for i=0到1500个循环。你能提供更多的信息或代码吗?你应该一次读取所有的数据,而不是一行一行。而且,当我们不知道它是什么时,很难帮助。数据看起来是这样的,您解析所述数据的代码也是这样的。请发布这些信息,我将非常乐意提供帮助。谢谢各位,但我放弃了HTML刮取的想法,转而采用Paul Mendoza建议的基于Web服务的方法。关于这一点,我可能还有其他问题
for(int i=0;i<1500;++i) 
  reader.ReadLine();