1
1
using System ;
2
+ using System . IO ;
2
3
using System . Net ;
3
4
using System . Net . Sockets ;
4
5
using System . Text ;
@@ -40,8 +41,8 @@ public void SendLineExceedsBuffer()
40
41
srv . AcceptAsync ( ) ;
41
42
42
43
using var ls = new LineTcpSender ( IPAddress . Loopback . ToString ( ) , _port , 25 ) ;
43
- var lineCount = 50 ;
44
- var expected = "metric\\ name,t\\ a\\ g=v\\ alu\\ ,\\ e number=10i,db\\ l=123.12,string=\" -=\\ \" \" ,привед =\" медвед\" 1000000000\n " ;
44
+ var lineCount = 500 ;
45
+ var expected = "metric\\ name,t\\ a\\ g=v\\ alu\\ ,\\ e number=10i,db\\ l=123.12,string=\" -=\\ \" \" ,при \\ вед =\" медвед\" 1000000000\n " ;
45
46
var totalExpectedSb = new StringBuilder ( ) ;
46
47
for ( int i = 0 ; i < lineCount ; i ++ )
47
48
{
@@ -50,7 +51,7 @@ public void SendLineExceedsBuffer()
50
51
. Field ( "number" , 10 )
51
52
. Field ( "db l" , 123.12 )
52
53
. Field ( "string" , " -=\" " )
53
- . Field ( "привед " , "медвед" )
54
+ . Field ( "при вед " , "медвед" )
54
55
. At ( new DateTime ( 1970 , 01 , 01 , 0 , 0 , 1 ) ) ;
55
56
totalExpectedSb . Append ( expected ) ;
56
57
}
@@ -78,6 +79,31 @@ public void SendNegativeLongAndDouble()
78
79
var expected = "neg\\ \\ name number1=-9223372036854775807i,number2=9223372036854775807i,number3=-1.7976931348623157E+308,number4=1.7976931348623157E+308\n " ;
79
80
WaitAssert ( srv , expected ) ;
80
81
}
82
+
83
+ [ Test ]
84
+ public void SendMillionToFile ( )
85
+ {
86
+ using var srv = CreateTcpListener ( _port ) ;
87
+ srv . AcceptAsync ( ) ;
88
+
89
+ var nowMillisecond = DateTime . Now . Millisecond ;
90
+ var metric = "metric_name" + nowMillisecond ;
91
+
92
+ using var ls = new LineTcpSender ( IPAddress . Loopback . ToString ( ) , _port , 2048 ) ;
93
+ for ( int i = 0 ; i < 1E6 ; i ++ )
94
+ {
95
+ ls . Metric ( metric )
96
+ . Tag ( "nopoint" , "tag" + i % 100 )
97
+ . Field ( "counter" , i * 1111.1 )
98
+ . Field ( "int" , i )
99
+ . Field ( "привед" , "мед вед" )
100
+ . At ( new DateTime ( 2021 , 1 , 1 , ( i / 360 / 1000 ) % 60 , ( i / 60 / 1000 ) % 60 , ( i / 1000 ) % 60 , i % 1000 ) ) ;
101
+ }
102
+ ls . Flush ( ) ;
103
+
104
+ File . WriteAllText ( $ "out-{ nowMillisecond } .txt", srv . GetTextReceived ( ) ) ;
105
+ }
106
+
81
107
82
108
private static void WaitAssert ( DummyIlpServer srv , string expected )
83
109
{
@@ -177,8 +203,8 @@ private class DummyIlpServer : IDisposable
177
203
private readonly TcpListener _server ;
178
204
private readonly byte [ ] _buffer = new byte [ 2048 ] ;
179
205
private readonly CancellationTokenSource _cancellationTokenSource = new ( ) ;
180
- private readonly StringBuilder _request = new ( ) ;
181
- private volatile int _totalReceived = 0 ;
206
+ private volatile int _totalReceived ;
207
+ private readonly MemoryStream _received = new ( ) ;
182
208
183
209
public DummyIlpServer ( int port )
184
210
{
@@ -211,9 +237,8 @@ private async Task SaveData(Socket connection)
211
237
int received = await connection . ReceiveAsync ( _buffer , SocketFlags . None , _cancellationTokenSource . Token ) ;
212
238
if ( received > 0 )
213
239
{
214
- var value = Encoding . UTF8 . GetString ( _buffer , 0 , received ) ;
215
- _request . Append ( value ) ;
216
- _totalReceived += value . Length ;
240
+ _received . Write ( _buffer , 0 , received ) ;
241
+ _totalReceived += received ;
217
242
}
218
243
}
219
244
}
@@ -228,7 +253,7 @@ public void Dispose()
228
253
229
254
public string GetTextReceived ( )
230
255
{
231
- return _request . ToString ( ) ;
256
+ return Encoding . UTF8 . GetString ( _received . GetBuffer ( ) , 0 , ( int ) _received . Length ) ;
232
257
}
233
258
}
234
259
}
0 commit comments