4个月内出现内存异常问题。我的客户使用webservice,他们想让我测试他们的web服务。在他们的web服务中,有一个函数调用上传。我在同时上传的1500个用户上测试了该功能。我尝试了visual studio(GC)的垃圾收集功能。用2mb的文件,没有异常,但是8mb的文件仍然有内存不足的例外。我已经尝试了很多次和很多解决方案,但仍然发生了。我现在要疯了。当上传正在进行时,我看了所有测试计算机的内存,但内存不存在。所以我认为问题来自webservice和服务器。但我的客户说,我必须改进从webservice和服务器到他们的原因。我现在要发疯了。你们对此有什么独处吗?另外,我们的客户端不是公共代码,我只是使用webservice的功能来测试。另外,当连接到vps时,我必须使用vps来连接他们的web服务和网络。
我必须确保我的测试脚本没有任何问题。这是我测试上传功能的测试脚本。
public void UploadNewJob(string HalID, string fileUID, string jobUID, string fileName, out List errorMessages)
{
errorMessages = null;
try
{
int versionNumber;
int newVersionNumber;
string newRevisionTag;
datasyncservice.ErrorObject errorObj = new datasyncservice.ErrorObject();
PfgDbJob job = new PfgDbJob();
job.CompanyName = Constant.SEARCH_CN;
job.HalliburtonSalesOffice = Constant.SEARCH_SO;
job.HalliburtonOperationsLocation = Constant.SEARCH_OL;
job.UploadPersonHalId = HalID;
job.CheckOutState = Constant.CHECKOUT_STATE;
job.RevisionTag = Constant.NEW_REVISION_TAG;
var manifestItems = new List();
var newManifestItems = new List();
var manifestItem = new ManifestItem();
if (fileUID == "")
{
if (job.JobUid == Guid.Empty)
job.JobUid = Guid.NewGuid();
if (job.FileUid == Guid.Empty)
job.FileUid = Guid.NewGuid();
}
else
{
Guid JobUid = new Guid(jobUID);
job.JobUid = JobUid;
Guid fileUid = new Guid(fileUID);
job.FileUid = fileUid;
}
// Change the next line when we transfer .ssp files by parts
manifestItem.PartUid = job.FileUid;
job.JobFileName = fileName;
manifestItem.BinaryFileName = job.JobFileName;
manifestItem.FileUid = job.FileUid;
manifestItem.JobUid = job.JobUid;
manifestItem.PartName = string.Empty;
manifestItem.SequenceNumber = 0;
manifestItems.Add(manifestItem);
errorMessages = DataSyncService.Instance.ValidateForUploadPfgDbJobToDatabase(out newVersionNumber, out newRevisionTag, out errorObj, out newManifestItems, HalID, job, false);
if (manifestItems.Count == 0)
manifestItems = newManifestItems;
if (errorMessages.Count > 0)
{
if (errorMessages.Count > 1 || errorMessages[0].IndexOf("NOT AN ERROR") == -1)
{
return;
}
}
//upload new Job
Guid transferUid;
long a= GC.GetTotalMemory(false);
byte[] fileContents = File.ReadAllBytes(fileName);
fileContents = null;
GC.Collect();
long b = GC.GetTotalMemory(false);
//Assert.Fail((b - a).ToString());
//errorMessages = DataSyncService.Instance.UploadFileInAJob(out transferUid, out errorObj, job.UploadPersonHalId, job, manifestItem, fileContents);
DataSyncService.Instance.UploadPfgDbJobToDatabase(out errorObj, out versionNumber, job.UploadPersonHalId, job, false, manifestItems);
}
catch (Exception ex)
{
Assert.Fail("Error from Test Scripts: " + ex.Message);
}
}
请查看我的测试代码。如果我的测试代码没有任何问题,我必须改进原因不是来自我的测试代码T_T
答案 0 :(得分:0)
我的猜测是你达到.NET的2 GB对象大小限制(1500 * 8MB> 4GB)。
您应该考虑更改为.NET 4.5并使用大对象模式 - 请参阅here - 该设置称为gcAllowVeryLargeObjects。