少なくとも3GBのデータを含むAPI URLからデータを取得しようとしています(エンタープライズレベルなので)。これをSQL Serverのテーブルに挿入しようとしています。 「プログラムの実行を続行するにはメモリが不足しています」というエラーが表示されます。私は、文字列のみ、以下は動作しません理由ですデータの2GBの最大を含めることができることを承知している:少なくとも3GBのデータのHttpWebRequestまたはHttpWebClient
string data = client.DownloadString(siteUrl) nor
string data = readStream.ReadToEnd()
私たちは、地域によってデータをフィルタしますクエリパラメータを持っているアイデアを思い付いたが、この特定の領域が2GBのデータを超えると失敗します。では、API URLからデータ全体を得ることができる他の方法はありますか?
編集 私たちが現在持っているのは、データをC#の文字列オブジェクトに格納することです。
string data = client.DownloadString(siteUrl)
データをデシリアライズして、次の手順で必要な要素を除外することができます。
JsonConvert.DeserializeObject<Dictionary<string, object>>(data)
返されたAPIはデータのリストを返さないため、データを取得する場所でstartElementを定義する必要があります。
List<Dictionary<string, string>> arrayOfData = (List<Dictionary<string, string>>)(data[startElement] as Newtonsoft.Json.Linq.JArray).ToObject(typeof(List<Dictionary<string, string>>));
それは次いでSQLプロバイダによってデータベースに挿入される一覧>にそれを格納するためのSQLの列のマッピングデータと一致するarrayOfData.Countを通して反復します。以下は、データ構造の例です(実際のデータは機密情報なので)
{"href": "someUrl"、 "limit": "1"、 "records":[{"columnA": "1" 「columnB」:「2」、「columnC」:「3」}]}
は、問題は、データ3GBのは、文字列はので、私は聞いてるのよ処理するには多すぎるので、私が処理を行うことはできません私はそれをファイルに保存することができますが、データはそのまま挿入するのが難しくなります。
ストリームで作業する必要があります。 'ReadToEnd'を呼び出さないでください。 – NtFreX
@ NtFreXしかし、テーブルに挿入するためにデータを解析するにはどうしたらいいですか? –
APIを管理できますか? –