2014-03-24 3 views
0

디스크에 데이터 테이블을 저장해야합니다. 그것은 단지 하나의 열이며 각 행을 저장하는 둥근 고리를 반복했습니다, 그리고 문자열에 행을 추가하고 그것을 저장하려고했습니다.디스크에 단일 열 데이터 테이블을 저장하는 것이 더 빠릅니다.

For i = 0 To dt.Rows.Count - 1 
fd.savefile("c:\filename.txt, " " & dt.Rows(i).Item("word"), "append") 'appends to file 
'or 
wordList = wordList & " " & dt.Rows(i).Item("word") 'builds up the word list and.. 
Next 
' 
fd.saveFile("c:\filename.txt", "overwrite") 'then saves it to disk. 

매우 느립니다.

이걸 발견했습니다 : 슈퍼 빠른 시간에 데이터의 직렬화 된 버전을 없앴다

http://bytes.com/topic/c-sharp/answers/250808-storing-datatable-data-hard-disk

FileStream fs = new FileStream(@"C:\test.bin", FileMode.Create); 
BinaryFormatter bf = new BinaryFormatter(); 
bf.Serialize(fs, dt); 
fs.Close(); 

. 내 루핑 프로세스보다 훨씬 빠릅니다. 어떻게 데이터 테이블을 덤프 할 수 있습니까? 그것은 데이터 테이블로 다시 읽을 필요가 없습니다. serialize 메서드는 모든 위치에 etc 태그를 넣습니다.

답변

1

각 행에 대해 파일을 다시 열지 마십시오. 하나 같은 스트림에 writng 유지하거나 File.WriteAllLines 같은 일 File의 도우미 메서드로 한 번에 모든 쓰기 : 멋진

File.WriteAllLines(@"c:\filename.txt", 
    dt.Rows.OfType<DataRow>().Select(r => r.Item("word")); 
+0

. 그러나 출력 파일의 각 행 사이에 캐리지 리턴을 넣고 있습니다. 어떻게 든 피할 수 있을까요? – bendecko

+0

@bendecko - 다른'File' 헬퍼를 체크하거나 원하는대로'StreamWriter'에 쓰십시오. –

+0

나는 볼 수있다. 나는 본다.이 모든 것에 익숙해 져있다. 감사! – bendecko