我的平面文件大小> 1GB。我需要解析文件并插入数据库。
方法一: 解析平面文件并将其转换为csv。然后在sql中使用批量插入。
问题:
使用异步进行文件读取,我被抛出 System.OutOfMemoryException
这样做需要将近 30 分钟(取决于大小)。
我是否需要有效地使用数据结构来减少时间或任何其他有效的方法?
也许在这里检查问题。具体来说,如果您使用的是 .Net 4.0,它会提到MemoryMappedFile的使用。
但是,如果您只想将其插入数据库,是否真的需要通过 C# 引入它?考虑按照此处的文章使用 SQL 进行操作。
您可以像这样将简单的 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
};