Visual Studio 2005/2008中的项目属性的"生成"选项卡包含"优化代码".
该文档声明它"......启用或禁用编译器执行的优化,以使您的输出文件更小,更快,更高效."
在我的SAX xml解析回调(XCode 4,LLVM)中,我正在对这种类型的代码进行大量调用:
static const char* kFoo = "Bar";
void SaxCallBack(char* sax_string,.....)
{
if ( strcmp(sax_string, kFoo, strlen(kFoo) ) == 0)
{
}
}
Run Code Online (Sandbox Code Playgroud)
假设strlen(kFoo)由编译器优化是否安全?
(Apple示例代码已经预先计算了strlen(kFoo),但我认为这对于大量常量字符串很容易出错.)
编辑:优化的动机:使用NSXMLParser在iPod touch 2G上解析我的SVG地图需要5秒钟(!).所以,我想切换到lib2xml,并优化字符串比较.
场景 - 150MB文本文件,它是旧电子邮件帐户的导出收件箱.需要解析并从特定用户中提取电子邮件并将其写入新的单个文件.我有适用的代码,它只是顽强的慢.
我正在使用标记字符串来搜索从原始文件开始/结束副本的位置.
这是主要功能:
StreamReader sr = new StreamReader("c:\\Thunderbird_Inbox.txt");
string working = string.Empty;
string mystring = string.Empty;
while (!sr.EndOfStream)
{
while ((mystring = sr.ReadLine()) != null)
{
if (mystring == strBeginMarker)
{
writeLog(mystring);
//read the next line
working = sr.ReadLine();
while( !(working.StartsWith(strEndMarker)))
{
writeLog(working);
working = sr.ReadLine();
}
}
}
}
this.Text = "DONE!!";
sr.Close();
Run Code Online (Sandbox Code Playgroud)
将所选消息写入新文件的函数:
public void writeLog(string sMessage)
{
fw = new System.IO.StreamWriter(path, true);
fw.WriteLine(sMessage);
fw.Flush();
fw.Close();
}
Run Code Online (Sandbox Code Playgroud)
同样,这个过程也有效.我得到了一个很好的输出文件,它只需要很长时间,我确信有办法让它更快.
我无法想象如何对这组循环进行矢量化.任何指导将不胜感激.
ind_1 = [1,2,3];
ind_2 = [1,2,4];
K = zeros(3,3,3,3,3,3,3,3,3);
pp = rand(4,4,4);
for s = 1:3
for t = 1:3
for k = 1:3
for l = 1:3
for m = 1:3
for n = 1:3
for o = 1:3
for p = 1:3
for r = 1:3
% the following loops are singular valued except when
% y=3 for ind_x(y) in this case
for a_s = ind_1(s):ind_2(s)
for a_t = ind_1(t):ind_2(t)
for a_k = ind_1(k):ind_2(k)
for a_l = …
Run Code Online (Sandbox Code Playgroud) 我想弄清楚如何替换示例:
sw1_code1_number1_jpg - > code1_number1_jpg
hon2_noncode_number2_jpg - > noncode_number2_jpg
ccc3_etccode_number3_jpg - > etccode_number3_jpg
ddd4_varcode_number4_jpg - > varcode_number4_jpg
所以结果都是第一个_之后的所有字符串如果没有找到任何_那么什么都不做.
我知道如何查找和替换字符串,str.replace,indexof,lastindexof,但不知道如何删除第一个找到的事件.
谢谢
我正在尝试使用VS 2010调试minidump.
虽然由我的应用程序生成的"调试模式"生成的小型转储工作正常并且可以正确调试,但由"发布模式"内置的应用程序生成的小型转储不起作用.我的意思是,在调试minidump时,我遇到了"No Source Available",因为符号可能有问题.
"模块"窗口中的"符号状态"显示:"符号文件中没有本机符号."
如果我从符号路径加载符号,我得到"在此文件夹中找不到匹配的符号文件".当然这是不真实的(我一直都知道,但以防我检查他们是否真的与ChkMatch.exe匹配,他们这样做).
我已经设法弄清楚哪些构建开关使minidump不可用 - 那些是"优化代码"和"调试信息".使minidump"工作"的唯一方法是取消选中"优化代码"并使用"完整"调试信息(不,pdb-only不起作用).这两个都有性能影响我真的想避免使用这种构建设置为我的应用程序的发布版本.
有谁知道为什么这两个开关使minidumps不合适?
谢谢.
在多个(大)链表中查找重复项的最快方法是什么.我将尝试用数组来说明问题,只是为了让它更具可读性.(我使用0-9中的数字来表示简单而不是指针).
list1[] = {1,2,3,4,5,6,7,8,9,0};
list2[] = {0,2,3,4,5,6,7,8,9,1};
list3[] = {4,5,6,7,8,9,0,1,2,3};
list4[] = {8,2,5};
list5[] = {1,1,2,2,3,3,4,4,5,5};
Run Code Online (Sandbox Code Playgroud)
如果我现在问:'列表1-5中是否存在数字8?' 我可以对列表进行排序,删除重复项,对所有列表重复此操作并将它们合并到"超级列表"中,并查看(新)重复项的数量是否等于我搜索的列表数量.假设我得到了正确的重复数,我可以假设我搜索的内容(8)存在于所有列表中.如果我改为搜索1,我将只得到四个重复项 - 并未在所有列表中找到.
是否有更快/更聪明/更好的方法来实现上述目的而无需以任何方式排序和/或更改列表?
PS:这个问题主要是出于纯粹的好奇心而没有别的!:)