如何在 C# 中优化 Time-Trigger Azure Functions 的性能?
How to optimize performance of Time-Trigger Azure Function in C#?
我有一个时间触发的 Azure 函数,每秒运行一次。该函数从 API 个服务器读取数据并将其存储到 ADLS 中。我如何优化该函数的性能,以便它可以进行超过 500 API 次调用并在 SECOND 中为每次调用每秒存储数据。
public static void Run([TimerTrigger("*/1 * * * * *")] TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
log.LogInformation($"Execution starts at: {DateTime.Now.ToString("hh.mm.ss.ffffff")}");
try
{
var IDs = GetIDs(); //makes 1 API call to fetch list of IDs
foreach(var i in IDs){
ReadAndWriteData(i); //reads data for each ID from API server and stores in ADLS
}
}
catch (Exception e)
{
log.LogError($"An exception has been raised : {e}");
}
log.LogInformation($"C# Timer trigger function execution ended at: {DateTime.Now}");
}
public static async Task<List<string>> GetIDs(){
//List<string> idList = await Task.Run(()=> ReadIDs()); //makes 1 API call to fetch list of IDs
//return idList;
}
public static async Task ReadAndWriteData(String id){
//var result = await Task.Run(()=> ReadData()); //reads data for each ID from API server
...
// uploads data to ADLS
}
每秒准确获取所有 ID 数据的最佳方法是什么?我已经尝试了一些并行编程/TPL 方法,但如果我只使用一个 ID,而不是所有 ID,它仍然会提供预期的准确性。
首先,可能有很多问题会导致您出现性能问题。您必须使用 Azure Service Profiler 或任何其他工具进行调试 并检查哪一行代码花费了多少时间。
部分原因可能是:
- 为获取 IDs/ADLS 操作编写了 低效 算法。
- 您还没有添加
.ConfigureAwait(false)
和 await
。
Automatic scaling
未为 Azure Functions
启用,并且缩放因 manual scaling
不足而受阻。
- 您正在使用繁重的 Nuget 包,这需要花费大量时间来创建 Azure Functions 实例。
- 您还没有将
ReadIDs
和 ReadData
函数设置为 asynchronous。
我有一个时间触发的 Azure 函数,每秒运行一次。该函数从 API 个服务器读取数据并将其存储到 ADLS 中。我如何优化该函数的性能,以便它可以进行超过 500 API 次调用并在 SECOND 中为每次调用每秒存储数据。
public static void Run([TimerTrigger("*/1 * * * * *")] TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
log.LogInformation($"Execution starts at: {DateTime.Now.ToString("hh.mm.ss.ffffff")}");
try
{
var IDs = GetIDs(); //makes 1 API call to fetch list of IDs
foreach(var i in IDs){
ReadAndWriteData(i); //reads data for each ID from API server and stores in ADLS
}
}
catch (Exception e)
{
log.LogError($"An exception has been raised : {e}");
}
log.LogInformation($"C# Timer trigger function execution ended at: {DateTime.Now}");
}
public static async Task<List<string>> GetIDs(){
//List<string> idList = await Task.Run(()=> ReadIDs()); //makes 1 API call to fetch list of IDs
//return idList;
}
public static async Task ReadAndWriteData(String id){
//var result = await Task.Run(()=> ReadData()); //reads data for each ID from API server
...
// uploads data to ADLS
}
每秒准确获取所有 ID 数据的最佳方法是什么?我已经尝试了一些并行编程/TPL 方法,但如果我只使用一个 ID,而不是所有 ID,它仍然会提供预期的准确性。
首先,可能有很多问题会导致您出现性能问题。您必须使用 Azure Service Profiler 或任何其他工具进行调试 并检查哪一行代码花费了多少时间。
部分原因可能是:
- 为获取 IDs/ADLS 操作编写了 低效 算法。
- 您还没有添加
.ConfigureAwait(false)
和await
。 Automatic scaling
未为Azure Functions
启用,并且缩放因manual scaling
不足而受阻。- 您正在使用繁重的 Nuget 包,这需要花费大量时间来创建 Azure Functions 实例。
- 您还没有将
ReadIDs
和ReadData
函数设置为 asynchronous。