首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未在内存中加载文件的Powershell管道文件内容进入应用程序

问未在内存中加载文件的Powershell管道文件内容进入应用程序
EN

Stack Overflow用户
提问于 2011-01-25 00:52:28
回答 4查看 7.8K关注 0票数 12

使用cmd,我将运行mysql -uroot database < filename.sql来导入数据库转储(从文件中读取并传递给MySQL)。然而,<在powershell中是“保留”的。

相反,在powershell中,我使用get-content filename.sql | mysql -uroot database。请注意,powershell在将filename.sql传递给MySQL之前,会将它完全读入内存,而对于大型数据库转储,它只是耗尽了内存。

显然,我可以通过cmd来执行这些任务,但是我有一些powershell脚本可以自动执行这样的任务,而且我不想要批量地重写它们。在这种情况下,filename.sql是在自动化开始时通过PS参数指定的变量。

那么,我如何克服这个内存限制呢?是否有另一种方法直接将文件内容输送到MySQL?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-25 01:19:00

你可以试试

代码语言:javascript
复制
mysql -uroot -pYourPassword -e "source C:\temp\filename.SQL"

或

代码语言:javascript
复制
mysql --user=root --password=YourPassword --execute="source C:\temp\filename.SQL"

如果事情开始变得复杂,也许您应该编写一个执行复杂任务的C#控制台应用程序。

票数 17
EN

Stack Overflow用户

发布于 2011-01-25 01:26:53

不确定这是否适用于您的应用程序(它应该一次处理1000条记录的文件,而不是一次处理所有记录):

代码语言:javascript
复制
get-content filename.sql -readcount 1000 |% {$_ | mysql -uroot database}
票数 2
EN

Stack Overflow用户

发布于 2014-04-27 00:20:40

我想说的是,对于大型文件,请远离cmdlet。我一直在使用30+百万行的文件做类似的事情,通过使用下面的代码没有问题。它在速度和内存消耗方面都表现得非常好.

代码语言:javascript
复制
$reader = [IO.File]::OpenText($filetoread)
while ($reader.Peek() -ge 0) {
   $line = $reader.ReadLine()

   #do your thing here

}
$reader.Close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4788935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档