我正在编写一个可以通过API提取某些数据的代码,但是它需要一个名为Item id的参数,该参数存储在我的数据库中。代码工作正常,我得到了想要的输出类型,但是问题是,这需要花费更多时间(不是很快)。
有两个功能
功能Item_id从SQL服务器中已经存在的数据库中获取Item_Id。
主函数,该函数调用Item_id函数以从数据库中获取Item_id。这些Item ID在API查询中用作参数,以获取该特定Item_id的序列号的序列号。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Net;
using Newtonsoft.Json;
namespace ConsoleApp2
{
class serial_connected_to_Database
{
/**************************************************
* Properties to convert Json output to C# objects
* ***********************************************/
#region Properties
public class SerialNumber
{
public string serialnumber_id { get; set; }
public string serialnumber { get; set; }
public string status { get; set; }
}
public class PageContext
{
public int page { get; set; }
public int per_page { get; set; }
public bool has_more_page { get; set; }
public string sort_column { get; set; }
public string sort_order { get; set; }
}
public class RootObject
{
public int code { get; set; }
public string message { get; set; }
public List<SerialNumber> serial_numbers { get; set; }
public PageContext page_context { get; set; }
}
#endregion
/***********************************************************
* Main program to fecth serial Numbers based on the Item_id
* specified in the API
***********************************************************/
public static void Main()
{
string strResponse = string.Empty; //to collect json Data
DataTable dataTable = Item_Id(); //fetching item id from function Item_id
foreach (DataRow dr in dataTable.Rows)
{
Console.WriteLine(dr["col_item_id"]+"Serial numbers for particular Item id are given below");
int k = 1; //variable to navigate to different pages
while (1 > 0)
{
/****************************************************************
* Requesting API with item id as parameter
* *************************************************************/
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://books.zoho.com/api/v3/items/serialnumbers?per_page=200&item_id=" + dr["col_item_id"] + "&organization_id=***********&page=" + k);
request.Method = "GET";
request.Headers.Add("Authorization", "*************************");
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
{
throw new ApplicationException("Error code in response recieved: " + response.StatusCode.ToString());
}
using (Stream resStream = response.GetResponseStream())
{
if (resStream != null)
{
using (StreamReader streamReader = new StreamReader(resStream))
{
strResponse = streamReader.ReadToEnd();
}
}
}
}
string Jsoncontent = strResponse;
/***************************************************************
* Deserializing Json Data into C# objects
* ************************************************************/
RootObject root = JsonConvert.DeserializeObject<RootObject>(Jsoncontent);
if (root.serial_numbers.Count != 0)
{
for(int i = 0; i < root.serial_numbers.Count; i++)
{
Console.WriteLine(root.serial_numbers[i].serialnumber);
}
}
else
{
break;
}
k = k + 1;
Console.WriteLine("Page= " + k);
}
}
}
/******************************************************************************
* Function to return Item id which is stored in Database
* ***************************************************************************/
public static DataTable Item_Id()
{
SqlConnection cnn = new SqlConnection(@"Data Source=************;Initial Catalog=*************;User ID=*******************;Password=*************");
cnn.Open();
DataTable dataTable = new DataTable();
string Query = "select col_item_id from tbl_Zoho_Items_data";
SqlDataAdapter DA = new SqlDataAdapter(Query, cnn);
DA.Fill(dataTable);
return dataTable;
}
}
}
执行过程需要花费很多时间,请帮助我以一些最佳方式使用书写或任何最佳做法。
答案 0 :(得分:1)
许多工作由外部服务完成-HTTP请求和数据库查询。 在不了解花费时间之前,您无法有意义地优化代码-可能是因为瓶颈不在您的应用程序之内,所以无法进行改进,但是您无法知道,除非您对应用程序进行概要分析,和/或模拟外部服务。试用一下Profiler,了解您的应用程序的实际功能-通过这种方式您将学到更多。
答案 1 :(得分:0)
我认为最好使用DataReader或tan的DataTable并使用Async方法进行连接和发布,或者可以获取项目列表,然后使用parallel.for异步方法中的方法,我认为这样做会更快< / p>
我认为这样会更好,更快,请对其进行测试并告诉我
<mat-select-trigger>
{{filter.currentValue ? filter.currentValue[0] : ''}}
<span *ngIf="filter.currentValue?.length > 1">
(+{{filter.currentValue.length - 1}} {{filter.currentValue?.length === 2 ? 'other' : 'others'}})
</span>
</mat-select-trigger>
答案 2 :(得分:0)
您可以尝试在Web api代码中应用缓存技术。意思是,仅当缓存不可用时,才必须调用db。您到处都会得到样品。