如何快速的将数组中的所有值赋值为一个非0数(memset类似方法) 以下方法可以快速初始化一个非0的数组:string[] s = "".PadRight(512 * 512, '1').ToCharArray().Select(c => c.ToString()).ToArray(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在C#中,循环是最快的,要想更快,用unsafe和指针,相比较用下标访问数组,它不会执行边界检查所以更快。 int[] array = new int[512 * 512]; array = array.Select(data => 10).ToArray();没测试…… 不知道速度…… 谢谢各位,Linq表达式项目不考虑使用,GC太高了,看来确实没有类似memset的函数了…… int[] array = Enumerable.Repeat<int>(10, 512 * 512).ToArray();那这样呢 memset本来就只能将每个字节填充为一样的。你这种int类型无法使用memset的。memset可以对应API函数FillMemory。像你这样的512*512的数组 初始化耗时在现代CPU基本可以忽略。 我这里给你一个用内存拷贝的快速方式 。 int Index = 1; array[0] = 10; fixed (int* Src = array) { while ((array.Length) > (1 << Index)) { CopyMemory(Src + (1 << (Index - 1)), Src, (1 << (Index - 1)) * sizeof(int)); Index++; } Index--; CopyMemory(Src + (1 << Index), Src, (array.Length - (1 << Index)) * sizeof(int)); }其中CopyMemory的原型为: [DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = true)] internal static extern void CopyMemory(void * Dest, void * src, int Length);我测试了5000* 5000的int数组,你那种写法时间在100ms左右,上面的约50ms。 C#.NET如何获取windows系统安装了哪些程序? WINFORM的请问一下如何做这样的LISTview 出错了? visual studio c# 中 asp.net 网站配置工具的问题 dotMSN机器人"未处理 System.Net.Sockets.SocketException"出错,怎么解决? [问题]简体繁体转换时遇到的新问题 求一个聊天程序的做法. DataGrid设置行高 webservice、网页数据抓取问题 求一段运用javascript 与.net后台相互传值的代码。在线等 c# winform 程序 打印问题 获取系统时间带星期
int[] array = new int[512 * 512];
array = array.Select(data => 10).ToArray();没测试…… 不知道速度……
int[] array = Enumerable.Repeat<int>(10, 512 * 512).ToArray();那这样呢
int Index = 1;
array[0] = 10;
fixed (int* Src = array)
{
while ((array.Length) > (1 << Index))
{
CopyMemory(Src + (1 << (Index - 1)), Src, (1 << (Index - 1)) * sizeof(int));
Index++;
}
Index--;
CopyMemory(Src + (1 << Index), Src, (array.Length - (1 << Index)) * sizeof(int));
}
其中CopyMemory的原型为: [DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = true)]
internal static extern void CopyMemory(void * Dest, void * src, int Length);我测试了5000* 5000的int数组,你那种写法时间在100ms左右,上面的约50ms。