我有一些LinqToSQL对象。 其中一个有“二进制”列,我认为它是SQL上的VarBinary(max)。
每隔一段时间我就需要将一个字节数组添加/连接到该列中的某一行。我就是这样做的:
void StoreBytesInDb(IEnumerable<byte> bytesToStore)
{
using (var dataBaseContext = new MyDataClasses(DatabaseInfo.ConnectionString))
{
if (this.currentObjectId == -1)
{
this.NewObjectToDatabase();
this.currentSavedBytes = new List<byte>();
}
this.CurrentObject = dataBaseContext.Objects.Single(e => e.Id_Object == this.currentObjectId);
this.currentSavedBytes.AddRange(bytesToStore);
this.CurrentObject.Bytes_Data = this.currentSavedBytes.ToArray();
dataBaseContext.SubmitChanges();
}
}
所以,正如你所看到的那样:
低速运转。
当我每秒加速几次时会出现问题。 有时会抛出'System.ArgumentException',说:“已经添加了一个具有相同键的项目。” 抛出异常的确切行是:
this.CurrentObject.Bytes_Data = currentSavedBytes.ToArray();
有关如何改善这一点的任何提示?
答案 0 :(得分:1)
如果你正在处理更大的字节数据 - 可能会将其移出Db ,保留一个参考文件系统 - 并附加在那里 - 这是更好的。
另一方面 - 只是一个想法......
currentSavedBytes
- 为什么要将其保留为会员?可能是一个确定性问题(如果共享) - 尝试在方法的范围内移动它。
答案 1 :(得分:0)
这些都不是最佳的。
我建议你: