我有以下用于写入二进制文件的代码:
CALL system_clock(Time1, rate)
OPEN( 1, FILE='Test.bin', STATUS='UNKNOWN', ACCESS='STREAM')
DO 275 I=1,NDOF
DO 274 J=1,UBW
IF (S(I,J).NE.0) THEN
WRITE (1) I
WRITE (1) J+I-1
WRITE (1) (S(I,J))
ENDIF
274 CONTINUE
275 CONTINUE
CLOSE(1)
CALL system_clock(Time2)
print *, "elapsed time: ", real(Time2-Time1) / real(rate)
我知道通过使用更少的 WRITE 语句,我可以让它更快。所以在循环内我使用以下代码,它更快:
IF (S(I,J).NE.0) THEN
WRITE (1) I, J+I-1, (S(I,J))
ENDIF
有没有办法摆脱循环(因为它很耗时)或进行任何其他更改以获得更有效的代码?
请注意,我希望在我的写作中具有 I、J+I-1 和 S(I,J)(仅非零值)的顺序。此外,由于我使用 C++ 程序来读取二进制文件,因此我必须使用流访问。
非常感谢任何建议。