上一篇隨筆中寫過64位程式與32位程式(https://www.cnblogs.com/Heavystudio/p/11059033.html),最近開始正式在項目中大量實現了,但又出現了一個問題, 由於32位程式中還調用了大量dll,導致每次調用時啟動與關閉時都拖泥帶水,致使出現運行異常runti ...
上一篇隨筆中寫過64位程式與32位程式(https://www.cnblogs.com/Heavystudio/p/11059033.html),最近開始正式在項目中大量實現了,但又出現了一個問題,
由於32位程式中還調用了大量dll,導致每次調用時啟動與關閉時都拖泥帶水,致使出現運行異常runtime error R6016 - not enough space for thread data,經嘗試發現,
這個異常會隨運行記憶體變化而變化,根本原因是因為多次調用32位程式後,導致沒有記憶體空間創建新的進程。
經查找資料顯示,這個問題經常出現在由C、C++、Vb6等寫的代碼中,而像C#中有自動記憶體管理,所以一般不會出現此類問題。
64位程式如下:
process.Kill();立刻殺死一切由這個32位程式啟動的進程,用一次,殺一次,不影響下次使用
static void Main(string[] args) { //創建refpropPipe進程 Process process = new Process(); //將refpropPipe.exe放在與refprop64Hv相同路徑下,相對路徑引用 process.StartInfo.FileName = @"C:\Users\Administrator\source\repos\refpropPipe\refpropPipe\bin\Debug\refpropPipe.exe"; //process.StartInfo.FileName = "refpropPipe.exe"; process.Start(); double value = 0; //向refpropPipe發送調用信息,即查詢輸入變數值 using (NamedPipeClientStream pipeClientStream = new NamedPipeClientStream("request")) { pipeClientStream.Connect(); string input = Method + "," + FluidName + "," + InpCode + "," + Units + "," + Prop1 + "," + Prop2; using (StreamWriter writer = new StreamWriter(pipeClientStream)) { writer.WriteAsync(input); } } //接收refpropPipe返回的信息,即查詢結果 using (NamedPipeClientStream pipeClientStream = new NamedPipeClientStream("respose")) { pipeClientStream.Connect(); using (StreamReader reader = new StreamReader(pipeClientStream)) { string val = reader.ReadToEnd(); value = Convert.ToDouble(val); } } //process.WaitForExit(); //process.Close(); //不在等待了,直接殺死進程,省得拖泥帶水,快哉快哉 process.Kill(); }