2016-07-25 2 views
6

JSON 파일을 구문 분석하고 SQL DB에 삽입하려고합니다. 파일 크기가 작 으면 (5MB 미만) 파서가 정상적으로 작동합니다.C# .net에서 큰 JSON 파일 읽기.

큰 파일 (> 5MB)을 읽으려고 할 때 "메모리 부족 예외"가 나타납니다.

if (System.IO.Directory.Exists(jsonFilePath)) 
       { 
        string[] files = System.IO.Directory.GetFiles(jsonFilePath); 
        foreach (string s in files) 
        { 
         var jsonString = File.ReadAllText(s); 
         fileName = System.IO.Path.GetFileName(s); 
         ParseJSON(jsonString, fileName); 

        } 
       } 

은 내가 JSONReader 접근하지만, 문자열이나 variable.Please 조언으로 전체 JSON을 얻기에 행운을 시도했다.

+2

무엇을" "대형의 개체에 해당하는 개체의 아주 큰 나무의 상단 ? 5.1meg? 5555555555 megabytes? –

+0

* JSONReader 접근 방식을 시도했지만 문자열이나 변수로 전체 JSON을 가져올 수 없습니다. * "JSONReader"의 경우 ['JsonTextReader']를 의미합니다 (http : //www.newtonsoft. json.NET의 com/json/help/html/T_Newtonsoft_Json_JsonTextReader.htm)을 사용하면 시도했지만 시도하지 못한 것을 공유 할 수 있습니까? – dbc

+0

foreach (문자열 s) {fileName = System.IO.Path.GetFileName (s); 사용 (WebClient 클라이언트 = 새 WebClient()) {사용 (Strea SR = mReader 새로운에서는 StreamReader (client.OpenRead (fileName에 jsonFilePath +))) {사용 (JsonReader 리더 = 새로운 JsonTextReader (SR)) {VAR jsonString reader.Value.ToString =(); ParseJSON (jsonString FILENAME에) } } } – user1046415

답변

2

를 사용하여 64 비트, 비슷한 질문에 RredCat의 답변을 확인하십시오

"은 기본적인 접근 방식이다 :

Newtonsoft.Json - Out of memory exception while deserializing big object

NewtonSoft Jason Performance Tips

은 토큰 화에 대한 데이비드 콕스 기사 읽기 Json.NET 라이브러리의 일부인 JsonTextReader 객체를 사용하십시오 .JsonTextReader는 JSON 파일을 한 번에 하나씩 읽으므로 전자 메일을 읽는 오버 헤드를 피할 수 있습니다. 파일을 문자열로 묶으십시오. 파일에서 토큰을 읽으면 객체가 생성되어 스택에 푸시되거나 푸시됩니다. 파일의 끝에 도달하면, 스택의 상단은 하나의 개체를 포함 - 원래 JSON 파일 "

Parsing Big Records with Json.NET

-1

json 파일이 너무 커서 메모리에 저장할 수 없습니다.

파일 이름이나 스트림을 입력으로 허용하는 JSON 판독기를 사용해야합니다. 귀하의 질문에 어떤 JSON Reader를 사용하고 있는지 분명하지 않습니다. 어떤 도서관 에서요?

JSON 리더가 전체 JSON 트리를 작성하면 여전히 메모리가 부족합니다. JSON 파일을 읽으면서 체리 중 하나를 찾고자하는 데이터를 선택하거나 쉽게 쿼리 할 수있는 다른 디스크 형식 (예 : sqlite 데이터베이스)에 데이터 구조를 쓸 수 있습니다.

+0

데이터 집합을 형성하여 전체 파일을 읽고 SQL DB에 저장해야합니다. – user1046415

+0

그런 다음 파일 이름 또는 스트림을 입력으로 허용하는 JSON 판독기를 사용하십시오. –

+0

내 Json 파일이 5MB보다 큽니다. – user1046415