Span<T> আপনার নিজের অ্যাপ্লিকেশনটির কোড বেসে বিভ্রান্তিকর এবং / অথবা বহনযোগ্য-ফ্লাফ ফেলে না দিয়ে চূড়ান্ত প্রতিযোগিতামূলক বিকল্প সরবরাহ করে:
// byte[] is implicitly convertible to ReadOnlySpan<byte>
static bool ByteArrayCompare(ReadOnlySpan<byte> a1, ReadOnlySpan<byte> a2)
{
return a1.SequenceEqual(a2);
}
.NET কোর 3.1.0 হিসাবে বাস্তবায়নের (সাহসের) এখানে পাওয়া যাবে ।
এই পদ্ধতিটি যুক্ত করার জন্য আমি @ এলিআরবেলের গিস্টটি সংশোধন করেছি SpansEqual, অন্যের মানদণ্ডে বেশিরভাগ কম আকর্ষণীয় অভিনেতা বাদ দিয়েছি , এটি বিভিন্ন অ্যারে মাপ, আউটপুট গ্রাফ দিয়ে চালাচ্ছি SpansEqualএবং বেসলাইন হিসাবে চিহ্নিত করব যাতে এটি বিভিন্ন পদ্ধতির সাথে কীভাবে তুলনা করে তা জানায় SpansEqual।
"ত্রুটি" কলামটি সরাতে হালকাভাবে সম্পাদিত নীচের সংখ্যাগুলি ফলাফলগুলি থেকে।
| Method | ByteCount | Mean | StdDev | Ratio |
|-------------- |----------- |-------------------:|------------------:|------:|
| SpansEqual | 15 | 3.562 ns | 0.0035 ns | 1.00 |
| LongPointers | 15 | 4.611 ns | 0.0028 ns | 1.29 |
| Unrolled | 15 | 18.035 ns | 0.0195 ns | 5.06 |
| PInvokeMemcmp | 15 | 11.210 ns | 0.0353 ns | 3.15 |
| | | | | |
| SpansEqual | 1026 | 20.048 ns | 0.0286 ns | 1.00 |
| LongPointers | 1026 | 63.347 ns | 0.1062 ns | 3.16 |
| Unrolled | 1026 | 39.175 ns | 0.0304 ns | 1.95 |
| PInvokeMemcmp | 1026 | 40.830 ns | 0.0350 ns | 2.04 |
| | | | | |
| SpansEqual | 1048585 | 44,070.526 ns | 35.3348 ns | 1.00 |
| LongPointers | 1048585 | 59,973.407 ns | 80.4145 ns | 1.36 |
| Unrolled | 1048585 | 55,032.945 ns | 24.4745 ns | 1.25 |
| PInvokeMemcmp | 1048585 | 55,593.719 ns | 22.4301 ns | 1.26 |
| | | | | |
| SpansEqual | 2147483591 | 253,648,180.000 ns | 1,112,524.3074 ns | 1.00 |
| LongPointers | 2147483591 | 249,412,064.286 ns | 1,079,409.5670 ns | 0.98 |
| Unrolled | 2147483591 | 246,329,091.667 ns | 852,021.7992 ns | 0.97 |
| PInvokeMemcmp | 2147483591 | 247,795,940.000 ns | 3,390,676.3644 ns | 0.98 |
SpansEqualসর্বোচ্চ-অ্যারে-আকারের পদ্ধতিগুলির জন্য শীর্ষে না এসে দেখে আমি অবাক হয়ে গিয়েছিলাম, তবে পার্থক্যটি এতটাই সামান্য যে আমার মনে হয় না এটি কখনই গুরুত্বপূর্ণ হবে।
আমার সিস্টেম তথ্য:
BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18362
Intel Core i7-6850K CPU 3.60GHz (Skylake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.100
[Host] : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT
DefaultJob : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT