I (70MB civarında) büyük bir SQL komut dosyası var ve belleğe okuma gerekir ve ardından GO tablolarda bölün.File.ReadAllText OutOfMemoryException
ben aşağıdakileri yapacak, ama OutOfMemoryException
alıyorum:
var script = File.ReadAllText(scriptFile);
var scriptName = Path.GetFileName(scriptFile);
var commands = Regex.Split(script, "^GO\r\n", RegexOptions.Multiline | RegexOptions.IgnoreCase);
Sonra commands
her komut fragman için, ben ExecuteNonQuery
diyoruz. Bu büyük betik dosyasını yüklemeye çalışana kadar her şey yolunda gidiyor.
Bu metin dosyasını daha verimli bir şekilde ayrıştırma önerileriniz var mı? Bir seferde bir satır oku StringBuilder
içine tampon ve bir "git" satırını gördüğünde daha sonra tampon verecektir bu
public static IEnumerable<string> SplitScriptOnGo(string scriptPath)
{
var buffer = new StringBuilder();
foreach (var line in File.ReadLines(scriptPath))
{
if (line == "GO")
{
yield return buffer.ToString();
buffer.Clear();
}
else
{
buffer.AppendLine(line);
}
}
}
gibi
Az önce bize sonra temizlemelisiniz akım grubunun işlenmesi ve sonraki satıra geçmek gerekir "GO" hit sonra bir kez, satır satır okumak ve bir listeye eklemek gerekir. –
Bunu [bu] (http://weblogs.asp.net/jongalloway/Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-_2D00_-the-easy-way) tamamından dosyası yüklenirken ne olmadıkça okumak isteyebilirsiniz tüm hafızanızı kullanır. – juharr
@juharr Aslında bunu dün okudum. –