VB.NET怎么在多线程中向txt文件追加一行数据
VB.NET如何在多线程中向txt文件追加一行数据
VB.NET如何在多线程中向txt文件追加一行数据,不管每行写入的顺序,只要能写入即可。我做了很多测试,委托什么的都还是会报文件被占用,比如有900个线程,可能写到10多个就报错了。求大神给关键思路
多线程随机几乎同时写入一个txt文件,就出现了文件被其他线程占用的情况,用了SyncLock 但没效果,请问我应该从哪个方面着手来解决这个问题呢。
在我的大型工程里面,这些线程都是同时开始的,不能一个结束再开始另一个,否则会占用非常长的时间影响效率(写入文件这一块可以等其他线程写完再输出),线程的其他工作都正常,就是输出结果这一块出现问题。
在此先谢谢各位啦!
------解决方案--------------------
搞一个全局的mutex比如dim m as new system.threading.mutex
然后到要写入的地方
mutex.waitone
写入的代码
mutex.releasemutex
------解决方案--------------------
好像不是锁定的问题...不好意思我胡扯了,还是等大神来吧
------解决方案--------------------
或者你可以考虑搞一个线程专门处理写入,弄一个写入的队列,这个线程不断从这个队列里拿数据写入,其他的900个线程同时往这个队列里加数据
可能是写文件操作来不及释放吧
------解决方案--------------------
不及释放,就应该考虑 排队,队列写入,或者线程池。
多个线程同时写入一个文件。肯定要排队。
或者做缓存,等系统有空再写入。
VB.NET如何在多线程中向txt文件追加一行数据,不管每行写入的顺序,只要能写入即可。我做了很多测试,委托什么的都还是会报文件被占用,比如有900个线程,可能写到10多个就报错了。求大神给关键思路
多线程随机几乎同时写入一个txt文件,就出现了文件被其他线程占用的情况,用了SyncLock 但没效果,请问我应该从哪个方面着手来解决这个问题呢。
在我的大型工程里面,这些线程都是同时开始的,不能一个结束再开始另一个,否则会占用非常长的时间影响效率(写入文件这一块可以等其他线程写完再输出),线程的其他工作都正常,就是输出结果这一块出现问题。
在此先谢谢各位啦!
Imports System.Threading
Public Class frmMain
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim t(900) As Thread
Dim obj As New thClass
For i As Integer = 0 To 899 Step 1
t(i) = New Thread(New ThreadStart(AddressOf obj.CheckGame))
t(i).Name = "记录的行" & vbTab & i
t(i).IsBackground = True
t(i).Start()
Next
End Sub
End Class
Public Class thClass
'Delegate Function a(ByVal strMsg As String) As Integer '声明委托类型 委托可以使一个对象调用另一个对象的方法
Public Sub CheckGame()
SyncLock Thread.CurrentThread
Thread.Sleep(3000)
Application.DoEvents()
''Dim d As New a(AddressOf SaveLog)
''d(Thread.CurrentThread.Name) '执行委托
SaveLog(Thread.CurrentThread.Name)
End SyncLock
End Sub
Private Sub SaveLog(ByVal strMsg As String)
If strMsg.Length = 0 Then Exit Sub
My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\日志记录.txt", Now & "," & strMsg & vbCrLf, True)
Application.DoEvents()
End Sub
End Class
------解决方案--------------------
搞一个全局的mutex比如dim m as new system.threading.mutex
然后到要写入的地方
mutex.waitone
写入的代码
mutex.releasemutex
------解决方案--------------------
好像不是锁定的问题...不好意思我胡扯了,还是等大神来吧
------解决方案--------------------
或者你可以考虑搞一个线程专门处理写入,弄一个写入的队列,这个线程不断从这个队列里拿数据写入,其他的900个线程同时往这个队列里加数据
可能是写文件操作来不及释放吧
------解决方案--------------------
不及释放,就应该考虑 排队,队列写入,或者线程池。
多个线程同时写入一个文件。肯定要排队。
或者做缓存,等系统有空再写入。