我编写的.Net应用程序必须读取存储内存中每条记录的CSV文件。在我的笔记本电脑上,这个文件只需不到一秒的时间......但是,由于部署到Azure中的Standard_D11_v2计算机上,我的应用程序的这部分时间超过了15分钟而且我无法解释这么多的性能损失。当我运行快速测试以查看读取单行所需的时间(来自相同的csv文件)时,我的笔记本电脑需要0.014毫秒,而天蓝色需要7.391毫秒(长525倍!)。
我使用Josh Close的CsvHelper进行阅读,而不是在读取循环中做任何密集的事情。该应用程序部署为云服务,Azure机器是标准(没有高级存储),但这似乎是一个相当简单的任务的性能过度下降。有没有其他人遇到Azure部署在读取CSV文件时速度很慢的问题?关于如何加速申请的任何建议?
Csv阅读代码供参考:
TextReader textReader = new StreamReader(filepath);
CsvReader csv = new CsvReader(textReader);
while (csv.Read())
{
// Get record from file
var record = (IDictionary<string, object>)csv.GetRecord<dynamic>();
if (record != null)
{
// Get 7 fields from record
// create new object from the fields
// store object in dictionary
}
}
编辑 - 除此之外,csv文件本地存储在运行该应用程序的计算机上。
答案 0 :(得分:0)
云服务的底层虚拟机具有非常低的IOPS,似乎它可能是造成此问题的原因。我通过云服务分配的机器是D11_V2标准,其最大IOPS为4x500。
我设置了自己的VM(DS3_V2 Promo,最大IOPS为16000),现在csv读取时间不到一秒,代码没有变化。