我有一個總是10兆字節的字節數組。不管它裏面有什麼數據,它都會是十兆。目的與大對象堆(more information)有關。添加到sql server數據庫時修剪一個字節[]
因此,如果一個1Mb文件被放入字節[]中,則最後九個宏將被清零。問題是,當我上傳到SQL Server時,上傳的文件總是10兆字節。我寧願只上傳必要的位。
我有它的大小複製到字節數組之前,所以我可以做一個修剪,如果需要的話。問題是,我不知道如何有效地執行一個不會在LOH上創建新的字節[]的問題。
想法?
更新#1
下面是一些僞代碼。我已經刪除了大部分不需要的代碼。它使用Microsoft.Practices.EnterpriseLibrary.Data庫來訪問數據庫。 (遺留代碼,不能改變)
Param[] parametersArray = new Param[10];
// other params
parametersArray[4] = new Param("DocumentData", DbType.Binary, documentToSave.Data);
// other params
DataAccess.ExecuteNonQuery("esMD.proc_WS_UpdateDocument", parametersArray);
public static int ExecuteNonQuery(string spName, params Param[] parameters)
{
int ret = -1;
DbCommand storedProcedure = Database.Db.GetStoredProcCommand(spName);
storedProcedure.CommandTimeout = commandTimeout;
if (parameters != null)
{
foreach (Param parameter in parameters)
{
if (parameter != null)
{
Database.Db.AddInParameter(storedProcedure, parameter.ParameterName, parameter.DbType, parameter.Value);
}
}
}
try
{
ret = MedicareDatabase.Db.ExecuteNonQuery(storedProcedure);
}
catch (Exception)
{
throw;
}
finally
{
if (storedProcedure != null)
{
storedProcedure.Dispose();
}
}
return ret;
}
更新#2
我修改上面的數據庫調用,還修改了我如何進入參數。
if (parameter.Size != null && parameter.Size > 0)
{
MedicareDatabase.Db.AddParameter(storedProcedure, parameter.ParameterName, DbType.Binary, parameter.Size, ParameterDirection.Input, true, 0, 0, string.Empty, DataRowVersion.Default, parameter.Value);
}
else
{
MedicareDatabase.Db.AddInParameter(storedProcedure, parameter.ParameterName, parameter.DbType, parameter.Value);
}
這似乎是爲我工作。有沒有人看到這個問題?
-Chad
向我們展示您用於「將文件上載到SQL Server」的代碼 – dtb 2012-02-07 21:53:26
已更新,並附有數據庫調用。 – Cyfer13 2012-02-07 22:02:15
您從哪裏找到了使用比實際需要的數組更大內存效率的信息?我無法看到你提到的那個問題的答案中的任何內容。相反,推薦使用幾個小陣列的答案超過一個,但這顯然不適用於你的情況。 – PHeiberg 2012-02-07 22:25:28