目前我写的课程有点问题。我已将其设置为非常有规律地写入文件,但是在单个线程中,当前我遇到错误消息:进程无法访问该文件,因为它正由另一个进程使用。这种情况经常发生但不一致 - 如果我运行足够多次它会破裂但是没有关于何时破裂的模式。
我已经解决了所有常见的罪魁祸首 - 我没有使用任何会返回FileStream的System.Io.File方法,所以在调用之间不需要关闭任何内容。最重要的是,我在一个非常简化的环境中测试一个通用的单线程数据结构类 - 我当然没有故意使用多线程,而且我的调试窗口中没有任何内容建议我也无意中使用它。我正在处理仅为此测试而存在的文件,所以我几乎100%确定没有其他人正在访问它们。
所以我真的有点失落。有关为什么会发生这种情况的任何想法?如果没有,任何关于有效解决方法的建议也将受到赞赏。
简化示例
主要方法:
static void Main(string[] args)
{
DiskMap<string> testMap = new DiskMap<string>("C:\path");
for (int i = 0; i < 100000; i++)
{
testMap.Add("a" + i, "aa" + i);
}
}
类别:
public class DiskMap<TValue>
{
private string path;
private int loadedDictionaryId;
private Dictionary<string, TValue> loadedDictionary;
public DiskMap(string path)
{
this.limit = limit;
this.path = path;
File.WriteAllText(path + "\\0.txt", "{");
File.WriteAllText(path + "\\1.txt", "{");
loadedDictionary = new Dictionary<string, TValue>();
loadedDictionaryId = 0;
}
public void Add(string key, TValue value)
{
int dictionaryId = GetId(key); // returns 0 or 1 in this example
if (dictionaryId == loadedDictId)
{
loadedDict.Add(key, value);
}
else
{
string filePath = this.path + "\\" + dictionaryId + ".txt";
File.AppendAllText(filePath, JsonConvert.SerializeObject(key) + ":" + JsonConvert.SerializeObject(value) + ","); // It breaks at this line
}
}
}