我目前正在努力解决c#中的内存使用问题.
我目前正在处理的工具能够上传和下载文件.为此,它使用字节数组作为文件内容的缓冲区.在上传或下载操作之后,我可以处理WebResponse和Stream(+ Reader/Writer)对象,但是字节数组永远保留在内存中.它超出范围我甚至'空'它,所以我猜垃圾收集永远不会运行.
在搜索时,我发现很多文章建议永远不要手动运行GC,但是有一个简约的后台应用程序,不断占用100甚至1000 MB的RAM(不断增加你使用它的时间越来越长)是不错的.
那么,如果不推荐使用GC,还能在这种情况下做些什么?
编辑3 /解决方案:我最终使用了一个16kb字节缓冲区,它填充了来自文件i/o的数据.之后,将缓冲区内容写入RequestStream,并采取进一步的操作(更新进度条等).
编辑2:这似乎与LOH有关.我将在周五进行测试并在此处记录结果.
编辑:这是代码,也许我错过了参考?
internal void ThreadRun(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
UploadItem current = Upload.GetCurrent();
if (current != null)
{
string localFilePath = current.src;
string fileName = Path.GetFileName(localFilePath);
elapsed = 0;
progress = 0;
try
{
string keyString = Util.GetRandomString(8);
worker.ReportProgress(0, new UploadState(0, 0, 0));
FtpWebRequest req0 = Util.CreateFtpsRequest("ftp://" + m.textBox1.Text + "/" + keyString, m.textBox2.Text, m.textBox3.Text, WebRequestMethods.Ftp.MakeDirectory);
req0.GetResponse();
FtpWebRequest req1 = Util.CreateFtpsRequest("ftp://" + m.textBox1.Text + "/" …Run Code Online (Sandbox Code Playgroud)