c# - 如何在不增加文件缓存的情况下将大文件复制到 Windows 中的网络共享/从网络共享复制? PowerShell 或 .NET,理想情况下

标签 c# windows powershell

我正在使用专用的 Windows 2008 R2 和 2003 SQL Server;整个白天和黑夜,我需要将大型文件从机器复制到网络共享以进行备份和日志传送。

有一个记录在案的问题,操作系统会为文件缓存分配大量内存来处理这些副本,这可能会从其他功能中抢夺内存。 (最终在 Win2k8 R2 上,任务管理器报告 Free Memory = 0 作为此行为的结果。)但是这些特定文件在复制后永远不会被读取,并且文件数据的“以防万一”缓存对于这个功能。

是否有一种简单的 .NET 或 PowerShell 方法来复制文件并且不让此文件缓存增长?作为引用,我正在处理的最大文件是 300+ GB。

我们目前在 2008 R2 上使用 RoboCopy,在 2003 上使用 xcopy,并为此功能使用 SQL Server 自己的日志传送文件复制作业。

我听说过 win2k8R2 中 XCOPY 中的/J 开关,以及来自 Exchange 的特殊 DLL,有人认为这有助于解决这个问题,但如果有一个真正干净简单的解决方案会很好。

另见 http://blogs.msdn.com/b/ntdebugging/archive/2007/11/27/too-much-cache.aspx

最佳答案

当我复制大量数据时,我使用 Robocopy,因为我遇到了其他选项的问题,例如XCOPY、Copy-Item 等
我的 Robocopy 脚本:

#Source folder
$src = "" 

#Destination folder
$dest = "" 

<#Robocopy options: 
E = Copy subdirectories, including empty directories.
V = Verbose output
ZB = Restartable & backup mode (to handle network connectivity issues & disruptions)
COPY DAT = Copy Data, Attributes, and Timestamps. Add 'S' to include ACL/permissions.
XJ = Exclude junction points.
#>
$options = @("/E","/V","/ZB", "/COPY:DAT", "/XJ")

#Store src, dest, and other previously defined options in an array.
$cmdArgs = @($src, $dest, $options)

#Execute!
robocopy @cmdArgs

关于c# - 如何在不增加文件缓存的情况下将大文件复制到 Windows 中的网络共享/从网络共享复制? PowerShell 或 .NET,理想情况下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9523277/

相关文章:

c# - Convert.ToDateTime 在 09 :59? 之后不起作用

c# - 从列表中删除 dto 时要发回的内容

windows - 使用任务计划程序每 4 小时运行一次脚本

java - 如何使用NIO获取有关Windows快捷方式来源的信息?

.net - 复杂字典的 foreach 循环不正确

Powershell 的 -split 根据方法参数的不同而表现不同

javascript - 是否有可能捕获 net::ERR_BLOCKED_BY_CLIENT?

c# - 为什么我可以检查 DateTime 是否为 null,即使它是一个值类型?

windows - 如何使用批处理更改项目中的特定字符串

powershell - 如何在使用 Get-Help 或 - 时启用 PowerShell 脚本以返回帮助文本?