我确定这个问题已经得到解答,但我无法使用搜索工具找到答案.
使用c#我想运行一个.sql文件.sql文件包含多个sql语句,其中一些语句分为多行.我尝试在文件中读取并尝试使用ODP.NET执行文件...但是我不认为ExecuteNonQuery真的是为了这样做而设计的.
所以我尝试通过生成一个进程来使用sqlplus ...但是除非我将UseShellExecute设置为true而生成进程,否则sqlplus会挂起并永远不会退出.这是不起作用的代码.
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "sqlplus";
p.StartInfo.Arguments = string.Format("xx/xx@{0} @{1}", in_database, s);
p.StartInfo.CreateNoWindow = true;
bool started = p.Start();
p.WaitForExit();
Run Code Online (Sandbox Code Playgroud)
WaitForExit永远不会返回....除非我将UseShellExecute设置为true.UseShellExecute的副作用是您无法捕获重定向的输出.
我需要在C#程序中执行大量的SQL语句(创建一堆表,视图和存储过程).
这些语句需要用GO语句分隔,但SqlCommand.ExecuteNonQuery()不喜欢GO语句.我想我将发布以供参考的解决方案是将SQL字符串拆分为GO行,并分别执行每个批处理.
有更简单/更好的方法吗?
我有一个1 GB的文本文件,我需要逐行阅读.最好和最快的方法是什么?
private void ReadTxtFile()
{
string filePath = string.Empty;
filePath = openFileDialog1.FileName;
if (string.IsNullOrEmpty(filePath))
{
using (StreamReader sr = new StreamReader(filePath))
{
String line;
while ((line = sr.ReadLine()) != null)
{
FormatData(line);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在FormatData()我检查线必须以一个字相匹配,并基于该增量的整数变量的起始字.
void FormatData(string line)
{
if (line.StartWith(word))
{
globalIntVariable++;
}
}
Run Code Online (Sandbox Code Playgroud) 在MSDN网站上指出:
缓冲区是内存中用于缓存数据的字节块,从而减少了对操作系统的调用次数.缓冲区可提高读写性能.缓冲区可用于读取或写入,但不能同时使用.BufferedStream的Read和Write方法自动维护缓冲区.
我应该在每个可能的场合使用这门课吗?
我必须将一个巨大的文件拆分成许多较小的文件.每个目标文件由偏移量和长度定义为字节数.我正在使用以下代码:
private void copy(string srcFile, string dstFile, int offset, int length)
{
BinaryReader reader = new BinaryReader(File.OpenRead(srcFile));
reader.BaseStream.Seek(offset, SeekOrigin.Begin);
byte[] buffer = reader.ReadBytes(length);
BinaryWriter writer = new BinaryWriter(File.OpenWrite(dstFile));
writer.Write(buffer);
}
Run Code Online (Sandbox Code Playgroud)
考虑到我必须将此功能调用大约100,000次,因此速度非常慢.
我使用中概述的方法从数据库生成一个非常大的.csv文件
它工作正常,达到一定程度.当导出的文件太大时,我会得到一个OutOfMemoryException.
如果我通过修改这样的代码来关闭输出缓冲:
protected override void WriteFile(System.Web.HttpResponseBase response)
{
response.BufferOutput = false; // <--- Added this
this.Content(response.OutputStream);
}
Run Code Online (Sandbox Code Playgroud)
文件下载完成.但是,它比启用输出缓冲时慢几个数量级(在localhost上测量缓冲为true/false的同一文件).
我知道这样做比较慢,但为什么它会慢慢相对爬行呢?我有什么办法可以提高处理速度吗?
UPDATE
也可以选择使用注释中建议的File(Stream stream,String contentType).但是,我不确定如何创建stream.数据是基于数据库查询动态组合的,而MemoryStream将耗尽连续的物理内存.欢迎提出建议.
更新2
在评论中建议,交替从数据库中读取并写入流会导致性能下降.我修改了代码以在单独的线程中执行流写入(使用生产者/消费者模式).性能没有明显差异.
我有.txt文件(包含超过百万行),大约1GB,我有一个字符串列表,我试图删除字符串列表中存在的文件中的所有行并创建新文件,但它正在采取很长时间.
using (StreamReader reader = new StreamReader(_inputFileName))
{
using (StreamWriter writer = new StreamWriter(_outputFileName))
{
string line;
while ((line = reader.ReadLine()) != null)
{
if (!_lstLineToRemove.Contains(line))
writer.WriteLine(line);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何提高代码的性能?
我想在加载远程xml文件期间显示进度条.我在Visual C#2008 Express Edition中使用Windows应用程序表单.
private void button1_Click(object sender, EventArgs e)
{
string text = textBox1.Text;
string url = "http://api.bing.net/xml.aspx?AppId=XXX&Query=" + text + "&Sources=Translation&Version=2.2&Market=en-us&Translation.SourceLanguage=en&Translation.TargetLanguage=De";
XmlDocument xml = new XmlDocument();
xml.Load(url);
XmlNodeList node = xml.GetElementsByTagName("tra:TranslatedTerm");
for (int x = 0; x < node.Count; x++ )
{
textBox2.Text = node[x].InnerText;
progressbar1.Value = x;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不能显示进度条加载..请建议我一些代码.提前致谢
我正在使用LINQ来解析从csv文件读取的大量字符串列表.我的代码可以正常使用100MB文件.但由于堆栈溢出异常,无法超越它.我正在使用500MB文件测试我的代码,其中列表中的字符串数量约为400万.(500MB csv文件中大约400万行)
public List<Metrics> MetricsParser(DateTime StartDate, TimeSpan StartTime, DateTime EndDate, TimeSpan EndTime,int dateIndex,int timeIndex)
{
DateTime sd = StartDate;
DateTime ed = EndDate;
TimeSpan st = StartTime;
TimeSpan et = EndTime;
StreamReader streamReader;
List<string> lines = new List<string>();
try
{
streamReader = new StreamReader("file.csv");
lines.Clear();
while (!streamReader.EndOfStream)
lines.Add(streamReader.ReadLine());
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (streamReader != null)
streamReader.Close();
}
IEnumerable<Metrics> parsedFileData = null;
parsedFileData = from line in lines
let log = line.Split(",")
where (!(line.StartsWith("#")) …Run Code Online (Sandbox Code Playgroud) 我有一个流程,首先生成大量数据,并将其保存到 mongoDB 集合中,然后分析数据,最后 - 我想将整个集合保存到磁盘上的文件中,并删除该集合。我知道我可以使用 MongoDump.exe 轻松完成此操作,但我想知道是否有任何方法可以直接从 c# 完成此操作?- 我的意思是不运行控制台进程 - 而是使用 MOngo C# 驱动程序内部的一些功能。
而且,如果可以做到 - 我将如何在 C# 中进行反向操作?- 即:将 .bson 文件加载到集合中?
c# ×8
performance ×3
.net ×2
asp.net-mvc ×1
bson ×1
buffer ×1
cpu ×1
file ×1
json ×1
linq ×1
mongodb ×1
oracle ×1
progress-bar ×1
scripting ×1
sql ×1
sql-server ×1
streaming ×1
utilization ×1