我正在使用专用的 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/