我有一个非常大的sql插件文件,它会抛出"内存不足"在SQL企业管理器中运行时出错。
我看到的建议是添加" GO"命令插入的每X行数都是"批处理"。
我正在尝试编写一个小函数来读取文件,每50行添加一行文本" GO"
我编写的代码在运行时也抛出了System.OutOfMemoryException。
有人可以建议更好的方法来编写我的代码来解决这个问题吗?
这就是我写的:
public static void AddGo()
{
int currentline = 0;
string FilePath = @"C:\Users\trevo_000\Desktop\fmm89386.sql";
var text = new StringBuilder();
foreach (string s in File.ReadAllLines(FilePath))
{
// add the current line
text.AppendLine(s);
// increase the line counter
currentline += 1;
if (currentline == 50)
{
text.AppendLine("GO");
currentline = 0;
}
}
using (var file = new StreamWriter(File.Create(@"C:\Users\trevo_000\Desktop\fmm89386Clean.sql")))
{
file.Write(text.ToString());
}
}
答案 0 :(得分:3)
您将文件保留在内存中,然后将其从内存写入文件。而不是在处理输入文件时写入输出文件;这种事情:
public static void AddGo() {
int currentline = 0;
string inputFilePath = @"C:\Users\trevo_000\Desktop\fmm89386.sql";
string outputFilePath = @"C:\Users\trevo_000\Desktop\fmm89386Clean.sql";
using (var outputFileStream=File.CreateText(outputFilePath)) {
foreach (string s in File.ReadLines(inputFilePath))
{
// add the current line
outputFileStream.WriteLine(s);
// increase the line counter
currentline += 1;
if (currentline == 50)
{
outputFileStream.WriteLine("GO");
currentline = 0;
}
}
}
}
请注意在输入文件上使用ReadLines而不是ReadAllLines - 有关详细信息,请参阅What is the difference between File.ReadLines() and File.ReadAllLines()?。