我正在使用 HttpWebRequest
对象通过客户端证书使用 SSL
上传文件,我的服务器上有一个有效的证书,我的应用程序有内存泄漏问题和 Microsoft已在以下链接上发布了与该问题相关的内容:
FIX: Memory Leak When SSL and Client Certificates Are Used With the HttpWebRequest Object
是否有任何解决方法可以避免此内存泄漏,特别是每个请求都消耗 8K 泄漏内存,这将导致我的应用程序消耗如此多的内存。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);
request.Method = "POST";
request.ContentType = "text/xml; charset=utf-8";
使用 .NET Memory Profiler 检测到内存泄漏它显示 HttpWebRequest
对象具有泄漏内存的字节数组,我正在放置流和请求对象。
我已经用 SSL
和 without SSL
尝试过这种情况,泄漏在非 SSL
请求中消失了。
最佳答案
只需将 HttpWebRequest
对象的 AllowWriteStreamBuffering
属性设置为 false:
request.AllowWriteStreamBuffering = false;
request.AllowAutoRedirect = false;
注意:框架会在创建 SSL session 时缓存它们,并在可能的情况下尝试为新请求重用缓存的 session 。尝试重用 SSL session 时,框架使用 ClientCertificates 的第一个元素(如果有的话),或者如果 ClientCertificates 为空,则尝试重用匿名 session 。
其他注意事项:出于性能原因,您不应将客户端证书添加到 HttpWebRequest,除非您知道服务器会要求它。 有关说明如何枚举客户端证书存储中的证书的代码示例,请参阅 X509Certificate2Collection 类。
或者尝试使用这个:
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
关于c# - 当 SSL 和客户端证书与 HttpWebRequest 对象一起使用时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082753/