[Test]public voID SimpleStresstest(){ bool wasExceptionThrown = false; var threads = new Thread[100]; for(int i = 0; i < 100; i++) { threads[i] = new Thread(new ThreadStart((Action)(() => { try { AccessDB(); } catch(Exception) { wasExceptionThrown = true; } }))); } for(int i = 0; i < 100; i++) { threads[i].Start(); } for(int i = 0; i < 100; i++) { threads[i].Join(); } Assert.That(wasExceptionThrown,Is.False);}
由于无法控制线程流,因此该测试不具有确定性.例如,如果要确保可以同时打开100个连接,可以在AccessDB()的逻辑中放置一个钩子,这将强制它在关闭与DB的连接之前等待.
例如,而不是以前的线程 *** 作:
try{ AccessDB(sychObject);}catch(Exception){ wasExceptionThrown = true;}
启动所有线程后,确保在sychObject上等待100个线程,然后释放它并加入线程.通过将CloseConnection()(例如)的逻辑设置为virtual并将该测试写入在CloseConnection()中等待的继承类,可以实现相同的目的.例如:
public class DataBase{ public voID AccessDB() { // Do logic here before closing connection CloseConnection(); } protected virtual voID CloseConnection() { // Real Logic to close connection }}public class FakeDataBase : DataBase{ ManualresetEvent sychObject; public FakeDataBase(ManualresetEvent sychObject) { this.sychObject = sychObject; } overrIDe protected voID CloseConnection() { sychObject.WaitOne(); base.CloseConnection(); }}总结
以上是内存溢出为你收集整理的C#压力测试 – 模拟对给定共享资源的多次访问全部内容,希望文章能够帮你解决C#压力测试 – 模拟对给定共享资源的多次访问所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)