我正在尝试用C#重写Vanitygen。这是我现在的代码
private void btnGenerate_Click(object sender, EventArgs e) {
KeyPair kp = KeyPair.Create(ExtraEntropy.GetEntropy()); //Generate private key
string wifprivatekey = new KeyPair(kp.PrivateKeyBytes).PrivateKeyBase58; //Create wif private key
string address = new AddressBase(kp, AddressTypeByte).AddressBase58);// Create base 58 address
if (address.StartsWith(pattern)) //compare value with input pattern
{
using (var writer = File.AppendText(@"C:\Users\ran242\Desktop\result.txt"))
{
writer.WriteLine("Pattern: "+pattern);
writer.WriteLine("Address: "+address);
writer.WriteLine("Privatekey: "+wifprivatekey);
}
}
}
我使用Parallel.For
测试了它的运行时间。该代码现在真的运行很慢,所以我打算提高性能。并行运行时,它只能检查1000个地址大约3秒钟,甚至没有用完所有CPU能力
System.Threading.Tasks.Parallel.For(0, 1000, i =>
{
KeyPair kp = KeyPair.Create(ExtraEntropy.GetEntropy()); //Generate private key
string wifprivatekey = new KeyPair(kp.PrivateKeyBytes).PrivateKeyBase58; //Create wif private key
string address = new AddressBase(kp, AddressTypeByte).AddressBase58);// Create base 58 address
if (address.StartsWith(pattern)) //compare value with input pattern
{
using (var writer = File.AppendText(@"C:\Users\ran242\Desktop\result.txt"))
{
writer.WriteLine("Pattern: "+pattern);
writer.WriteLine("Address: "+address);
writer.WriteLine("Privatekey: "+wifprivatekey);
}
}
});
是否有什么方法可以改进代码并在其他计算机上运行此代码时使用100%的CPU或任何CPU?谢谢
答案 0 :(得分:1)
您要做什么接近realtime progtramming。那不是您可以随心所欲地做或学到的东西。
实时编程是一个高度专业化的编程领域,具有专门的操作系统。根本不适合使用C#和.NET。 JiT编译的垃圾收集运行时不是用于实时编程的正确环境。那就是为什么原始程序是用C语言编写的。
据我所知,您正在尝试以超出技能水平的方式进行编程。您需要首先学习多任务处理,然后才能进行射击。然后,您需要知道此问题甚至是Pleasingly Paralelizeable还是何时发生Paralell Slowdown。在您的计算机上,请注意。诸如Swapfile之类的东西很容易妨碍这种性能。