我正在尝试简化大量遗留C代码,其中,即使在今天,在构建维护它的人之前需要一个源文件,并在编译之前根据各种类型的环境手动修改以下部分.
这个例子如下,但这是问题所在.我的C上生锈了,但我记得不鼓励使用#ifdef.你们能提供更好的选择吗?另外 - 我认为其中一些(如果不是全部)可以设置为环境变量或作为参数传入,如果是这样 - 什么是定义这些然后从源代码访问的好方法?
这是我正在处理的代码片段
#define DAN NO
#define UNIX NO
#define LINUX YES
#define WINDOWS_ES NO
#define WINDOWS_RB NO
/* Later in the code */
#if ((DAN==1) || (UNIX==YES))
#include <sys/param.h>
#endif
#if ((WINDOWS_ES==YES) || (WINDOWS_RB==YES) || (WINDOWS_TIES==YES))
#include <param.h>
#include <io.h>
#include <ctype.h>
#endif
/* And totally insane harcoded paths */
#if (DAN==YES)
char MasterSkipFile[MAXSTR] = "/home/dp120728/tools/testarea/test/MasterSkipFile";
#endif
#if (UNIX==YES)
char MasterSkipFile[MAXSTR] = "/home/tregrp/tre1/tretools/MasterSkipFile";
#endif
#if (LINUX==YES)
char MasterSkipFile[MAXSTR] = "/ptehome/tregrp/tre1/tretools/MasterSkipFile";
#endif …Run Code Online (Sandbox Code Playgroud) 我正在构建一个基本的CRUD库,我期望在本地(添加引用)和wcf(添加服务引用)环境中使用它.
CRUD设置的Create,Uupdate和Delete部分(具有更复杂的业务规则)的最佳返回类型是什么?
我希望能够最大限度地减少线路上的来回,但我也希望为我的客户提供有关何时操作失败我的业务逻辑但在技术上有效的有意义的信息(因此它不是例外).
举个例子,CRUD用于Person类,它包含以下字段:FirstName,MiddleName LastName和Brith的Date.首先,最后和DOB是必需的,但中间则不是.
我应该如何将业务逻辑的失败传达给客户?IE"您必须为FirstName指定一个值."
对于性能明智而言更好的是在foreach语句之外声明变量,并且每次都将它重新分配到它(foreach)或在foreach中创建一个新变量,例如
private List<ListItem> GetItems()
{
var items = new List<ListItem>();
var collection = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
ListItem item;
foreach (var i in collection)
{
item = new ListItem { Text = i.ToString() };
items.Add(item);
}
return items;
}
Run Code Online (Sandbox Code Playgroud)
还是这个?
private List<ListItem> GetItems()
{
var items = new List<ListItem>();
var collection = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
foreach (var i in …Run Code Online (Sandbox Code Playgroud) 我发现无法在地址栏中搜索特定值.
var str = window.location;
//var str = "http://www.website.com/78203/";
var x = str.search(/78203/i);
alert(x);
Run Code Online (Sandbox Code Playgroud)
上面的代码什么也没有返回,实际上杀死了其他任何东西的运行(表示错误),但控制台中没有任何东西被抛出.
如果你删除注释,它运行正常,返回一个大于-1的值(意味着它找到了一些东西).
这显然是我无法正确理解的事情,有人可以帮助我吗?
我一直试图检查我的arraylist以查看某个对象是否已经存在,但它总是返回false.有没有人对我在使用arrayList做错了什么感到厌烦.
ArrayList arr;
void Init()
{
arr = new ArrayList();
}
void Fred()
{
CauseAssignment ca = new CauseAssignment(Param1.Text, Param2.Text);
if(!arr.Contains(ca))
arr.Add(ca);
}
public class CauseAssignment
{
private string _Path;
public string Path
{
get { return _Path; }
}
private string _DelimRootCause;
public string DelimRootCause
{
get { return _DelimRootCause; }
}
public CauseAssignment(string path, string delimRootCause)
{
_Path = path;
_DelimRootCause = delimRootCause;
}
public override string ToString()
{
return _Path;
}
}
Run Code Online (Sandbox Code Playgroud) 我需要与多个线程同时访问一个文件.这需要同时完成,不出于性能原因而没有线程序列化.
特别是文件是使用'临时'文件属性创建的,该属性鼓励窗口将文件保存在系统缓存中.这意味着文件读取的大部分时间不会靠近磁盘,但会从系统缓存中读取文件的一部分.
能够同时访问此文件将显着提高我的代码中某些算法的性能.
所以,这里有两个问题:
这是创造:
FFileSystem := CreateFile(PChar(FFileName),
GENERIC_READ + GENERIC_WRITE,
FILE_SHARE_READ + FILE_SHARE_WRITE,
nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL OR
FILE_FLAG_RANDOM_ACCESS OR
FILE_ATTRIBUTE_TEMPORARY OR
FILE_FLAG_DELETE_ON_CLOSE,
0);
Run Code Online (Sandbox Code Playgroud)
这是第二次开放:
FFileSystem2 := CreateFile(PChar(FFileName),
GENERIC_READ,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL OR
FILE_FLAG_RANDOM_ACCESS OR
FILE_ATTRIBUTE_TEMPORARY OR
FILE_FLAG_DELETE_ON_CLOSE,
0);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试过各种标志组合,但没有成功.打开的第二个文件总是失败,并且消息表明该文件在被另一个进程使用时无法访问.
编辑:
好的,还有更多的信息(我希望不要迷失在这里的杂草......)
有问题的过程是在WinXP 64上运行的Win32服务器进程.它维护大型空间数据库,并希望在L1/L2缓存结构的内存中保留尽可能多的空间数据库.L1已经存在.L2作为一个"临时"文件存在,它保留在Windows系统缓存中(这有点像一个肮脏的技巧,但在某种程度上绕过win32内存限制).Win64意味着我可以拥有系统缓存使用的大量内存,因此用于保存L2缓存的内存确实会计入进程内存.
多个(可能很多)线程希望同时访问L2缓存中包含的信息.目前,访问是序列化的,这意味着一个线程可以读取它的数据,而大多数(或其余的)线程被阻塞,等待该操作完成.
L2高速缓存文件确实被写入,但我很乐意全局序列化/交错读写类型操作,只要我可以执行并发读取.
我知道存在令人讨厌的潜在线程并发问题,而且我知道有很多方法可以在其他环境中对这只猫进行修饰.我有这个特定的上下文,我正在尝试确定是否有一种方法允许在文件内和同一进程内进行并发线程读取访问.
我考虑的另一种方法是将L2缓存拆分为多个临时文件,其中每个文件以当前单个L2缓存文件的方式串行化线程访问.
是的,这种有点绝望的方法是因为64位Delphi不会很快与我们在一起:-(
谢谢,雷蒙德.
目前,我有一个Application,它由一个BasePage组成,它作为标题(面板),页脚(面板)和继承页面内容的中心.我遇到的问题是ResourceReferences(也许这甚至不是正确的方法).我正在寻找一个解决方案,允许我做以下事情:
到目前为止,我已经阅读了几个示例,这些示例展示了如何为组件或应用程序级别范围打包资源,但似乎没有一个能够解决我正在寻求帮助的所有3个问题.至关重要的是,我不必将全局使用的图像(编辑图标,徽标等)复制到每个组件包中以进行引用,并且出于维护原因这些绑定可以在一个地方全局进行以便于参考,这将是很好的.更新.
我知道java中有一个"Vector"类,但它似乎只是一个更简单的ArrayList类型的交易,而不是一个实际的数学Vector(如数量和方向).
有没有办法在Java中进行Vector操作(特别是添加)?或者我是不是自己不得不实施它或使用第三方模块?
-Jenny
假设我有
std::map< std::string, std::string > m_someMapA类的私有成员变量
两个问题:(我问的唯一原因是因为我遇到过这样的代码)
这条线的目的是什么:
A::A() : m_someMap()
Run Code Online (Sandbox Code Playgroud)
现在我知道这是初始化,但你必须这样做吗?我糊涂了.
什么是默认值std::map< std::string, std::string > m_someMap,C#还定义int,double等始终初始化为defualt 0且对象为null(至少在大多数情况下)那么C++中的规则是什么?是对象初始化为defualt为null和原语为垃圾?当然我正在考虑实例变量.
编辑:
另外,既然大多数人都指出这是一种风格选择而不是必要的,那么:
A :: A():m_someMap(),m_someint(0),m_somebool(false)
我正在使用Apple的CoreDataBooks示例项目作为核心数据的学习辅助工具.
我修改了应用程序,以便在应用程序加载时首先显示菜单页面 - 而不是Books tableview(RootViewController).
我做了以下事情:
我在界面构建器中创建了一个菜单页面(只是一个带有按钮的视图)
CoreDataBooksAppDelegate.h现在看起来像这样:
// for the menu
@class MenuViewController;
@interface CoreDataBooksAppDelegate : NSObject <UIApplicationDelegate> {
NSManagedObjectModel *managedObjectModel;
NSManagedObjectContext *managedObjectContext;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
UIWindow *window;
UINavigationController *navigationController;
//for the menu
MenuViewController *viewController;
}
- (IBAction)saveAction:sender;
//for the menu
@property (nonatomic, retain) IBOutlet MenuViewController *viewController;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, readonly) NSString *applicationDocumentsDirectory;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet …Run Code Online (Sandbox Code Playgroud)