从c#中的Request.BufferedInputStream读取100行(<;=100个字符)几乎需要6秒
在这里,我尝试从请求体读取字符串行。每行包含一条sms消息的数据。将单行转换为单个sms对象。我在localhost中使用100行数据作为请求主体的post请求来测量时间。但这几乎需要6秒钟。我想应该快很多。有什么我遗漏的吗从c#中的Request.BufferedInputStream读取100行(<;=100个字符)几乎需要6秒,c#,asp.net,C#,Asp.net,在这里,我尝试从请求体读取字符串行。每行包含一条sms消息的数据。将单行转换为单个sms对象。我在localhost中使用100行数据作为请求主体的post请求来测量时间。但这几乎需要6秒钟。我想应该快很多。有什么我遗漏的吗 Stopwatch stcc3 = new Stopwatch(); stcc3.Start(); string[] lines = body(); var list = convert(lines); stcc3.Stop(); Console.WriteLine("ti
Stopwatch stcc3 = new Stopwatch();
stcc3.Start();
string[] lines = body();
var list = convert(lines);
stcc3.Stop();
Console.WriteLine("time3: " + stcc3.Elapsed);
下面是两个函数的主体
private string[] body()
{
using (Stream inp = Request.GetBufferedInputStream())
{
using (StreamReader reader = new StreamReader(inp, Encoding.UTF8))
{
List<String> lines = new List<string>();
while(!reader.EndOfStream)
{
lines.Add(reader.ReadLine());
}
return lines.ToArray();
}
}
}
private List<ISms> convert(string[] lines)
{
List<ISms> list = new List<ISms>();
for (int idx = 0; idx < lines.Length; idx++)
{
string ln = lines[idx];
ISms iSms = new ISms();
string[] wd = ln.Split(new char[] { '|' });
int i = 0;
iSms.id = parseInt(wd[i++]);
iSms.messageDate = DateTime.Parse(wd[i++]);
iSms.receiveDate = DateTime.Parse(wd[i++]);
iSms.originator = wd[i++];
iSms.text = wd[i++];
list.Add(iSms);
}
return list;
}
我正在从一个java程序发出post请求。我已经使用SpringRESTTemplate向上述c#mvc控制器发出post请求。这是密码
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add(HttpHeaders.AUTHORIZATION, authToken);
interceptHeaders(httpHeaders);
OSms[] oSmsArray = rt.postForObject(getPostUrl(), new HttpEntity(convert(queue), httpHeaders), OSms[].class);
onSuccess(queue);
onSuccess(oSmsArray);
这是转换函数的主体
public static String convert(List<ISms> queue) {
StringBuilder sb = new StringBuilder();
queue.forEach((sms) -> {
sb
.append(sms.getId())
.append(seperator)
.append(convert(sms.getMessageDate()))
.append(seperator)
.append(convert(sms.getReceiveDate()))
.append(seperator)
.append(sms.getOriginator())
.append(seperator)
.append(sms.getText())
.append('\n');
});
return sb.toString();
}
公共静态字符串转换(列表队列){
StringBuilder sb=新的StringBuilder();
queue.forEach((sms)->{
某人
.append(sms.getId())
.append(分隔符)
.append(转换(sms.getMessageDate()))
.append(分隔符)
.append(转换(sms.getReceiveDate()))
.append(分隔符)
.append(sms.getOriginator())
.append(分隔符)
.append(sms.getText())
.append('\n');
});
使某人返回字符串();
}
您是否可以注释掉var list=convert(行)请再次检查响应时间?+1我猜Anirudha是在问,因为它可能是受输入流限制的IO,而不是受转换器限制的CPU。快速分析可能有助于找到它延迟的实际原因,我会再次测试它,但令人惊讶的是,这次只花了5毫秒。但在我之前的测试中,同样的代码花费了5秒多。
public static String convert(List<ISms> queue) {
StringBuilder sb = new StringBuilder();
queue.forEach((sms) -> {
sb
.append(sms.getId())
.append(seperator)
.append(convert(sms.getMessageDate()))
.append(seperator)
.append(convert(sms.getReceiveDate()))
.append(seperator)
.append(sms.getOriginator())
.append(seperator)
.append(sms.getText())
.append('\n');
});
return sb.toString();
}