我的平面文件大小> 1GB。我需要解析文件并插入DB。
方法1: 解析并将flatfile转换为csv。 然后在sql中使用批量插入。
问题:
使用async进行文件读取,我被抛出System.OutOfMemoryException
这需要将近30分钟(取决于大小)。
我是否需要有效利用数据结构来减少时间或任何其他有效的方法?
答案 0 :(得分:1)
或许查看question here。具体来说,如果您使用的是.Net 4.0,则会提到MemoryMappedFile的使用。
但是,如果您只想将其插入数据库中,是否真的需要通过C#引入它?根据文章here,考虑使用SQL。
答案 1 :(得分:0)
你可以像这样使用简单的FileStream和BinaryReader
Boolean isSaving = true, savedOk = false;
new Task(new Action(() =>
{
try
{
string fileName = "filename.txt";
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
BinaryReader br = new BinaryReader(fs);
long size = new FileInfo(fileName).Length;
int bytesPerRead = (int)(size < 512000 ? size : 512000);
byte[] past = br.ReadBytes(bytesPerRead);
int offset = 0;
while (offset < size)
{
//TODO - SAVE YOUR BYTE ARRAY TO DB USING WCF OR LOCAL PROC
offset = offset + bytesPerRead;
bytesPerRead = (int)(size - offset < 512000 ? size - offset : 512000);
past = br.ReadBytes(bytesPerRead);
}
savedOk = true;
}
}
catch (Exception ex) { savedOk = false; }
isSaving = false;
})).Start();
while (isSaving)
{
//DOUPDATES
};