我已经看到Windows系统使用临时文件来提高某些任务的性能.当我查看它们时,这些文件标有0x100属性.我收到了微软的以下文字:"
通过使用带有FILE_ATTRIBUTE_TEMPORARY标志的CreateFile(),您可以让系统知道该文件可能是短暂的.临时文件创建为普通文件.系统需要对文件系统进行最少量的延迟写入,以保持磁盘结构(目录等)的一致性.这给出了文件已写入磁盘的外观."
使用Delphi创建这样的临时文件的任何例子?
谢谢.
[编辑]
补充问题:可能是使用此类文件的上下文,例如,它可以用于日志系统.日志是这个文件的临时属性?当日志变得非常大时,它会更快,更少内存吗?
[编辑]
好的,我使用下面的schnaader给出的解决方案使用FILE_ATTRIBUTE_TEMPORARY创建文件:
hMyFile := CreateFile(FileName,
GENERIC_WRITE,
0,
nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_TEMPORARY,
0);
Run Code Online (Sandbox Code Playgroud)
这样的文件在创建时获得0x120属性.因此根据系统的临时文件.
我还创建了一个带有FILE_FLAG_DELETE_ON_CLOSE标志的文件(请参阅L. Osterman撰写的这篇文章).
所以:
hMyFile := CreateFile(FileName,
GENERIC_WRITE,
0,
nil,
CREATE_ALWAYS,
FILE_FLAG_DELETE_ON_CLOSE,
0);
Run Code Online (Sandbox Code Playgroud)
此文件没有属性,并且在关闭或销毁应用程序时会自动删除该文件.
我没有找到如何组合属性和标志.任何的想法?
谢谢
我已经阅读了很多关于软件设计的书籍,而且越来越多我想知道我在业务对象和序列化之间分离关注点所学到的东西是否能让我更有成效.
我受域驱动设计的影响,所以当我设计我的业务类时,我不会考虑持久性.与我的数据库/ Web服务技术/缓存技术相关联的唯一对象被封装在具有良好域接口的存储库后面.
为了说明,对于传统的应用程序数据库< - > Web服务< - > RIA,我设计了我的业务类Account和Employee.然后,如果我想从数据源获取帐户,我创建一个IAccountRepository,并实现查询或将帐户添加到我的数据源的方法.
要向我的应用程序添加缓存功能,只需创建一个代理类来实现IAccountRepository并包装真实存储库,然后将其注入我的IOC容器中.
为了实现数据库存储库,我使用ORM从我的数据库模式创建类,然后我使用create a translator将数据库类转换为业务类,这样我的业务类就与我的数据库模式分离.
我还为我的Web服务创建专用数据协定类,然后Web服务使用转换器将业务对象的聚合从Web服务角度转换为其数据表示.
当我创建我的RIA应用程序时,我再次设计自己的域模型,但这次存储库实现使用Web服务而不是数据库(以及翻译器).
对于WPF开发人员,我创建了我的ViewModel和我的View.
我曾经这样编程.
但是,当我的老板来时,说:你可以在这个表格中添加一个字段...... 等等等等等等我必须:
我越来越想将业务对象与数据库访问技术和Web服务技术或序列化技术结合起来.
这样我就不再需要维护翻译了.例如,为什么不在业务对象上使用这些技术的属性/注释?是的它带来了一些禁忌,是的,我需要在我的字段上获取/设置,即使我希望我的属性是只读的,是的,我的业务模块将具有外部依赖性.但我认为这将导致更少的代码和更可维护的系统.
我的存储库的实现将是微不足道的,不会依赖于翻译.
虽然我看到这样编码的优点,但我总是对这样的代码感到内疚.在我的业务对象上添加5个属性/注释以及我的数据访问技术/ Web服务技术/序列化技术,我感到非常内疚,我觉得这是不对的.
为什么我分离关注数据库/业务对象/ Web服务,让我编写更多代码?
你有其他选择吗?
任何人都可以帮助,我有问题做一个排序,我以为我已经排序但似乎没有工作.
我有一个存储以下值的List
8,6,10,11,7
我还有另一个List(我班上的配件,它有一个叫做accessoryId的属性,当前的类是id的顺序,当前是6,7,8,10,11)
因此,我需要将它们从6,7,8,10,11排序到简单列表中使用的顺序,即8,6,10,11,7
我有我的icomparable(见下文),我这样打电话 - 它确实输入但是出了问题,因为列表仍然有我所有的课程,但仍然是6,7,8,10,11的顺序
// accesories is the IList<Accessories> (hence why i am use ToList)
// and sortOrder is the simple int list list<int>
accesories.ToList().Sort(new ItemTpComparer(sortOrder));
class ItemTpComparer : IComparer<Accessories>
{
private IList<int> otherList;
public ItemTpComparer(IList<int> otherList)
{
this.otherList = otherList;
}
#region IComparer<Accessories> Members
public int Compare(Accessories x, Accessories y)
{
if (otherList.IndexOf(x.AccessoryId) > otherList.IndexOf(y.AccessoryId))
return 1;
else if (otherList.IndexOf(x.AccessoryId) < otherList.IndexOf(y.AccessoryId))
return -1;
else
return 0;
// tried below also didn't work
//return otherList.IndexOf(x.AccessoryId) …Run Code Online (Sandbox Code Playgroud) 我正在使用MATLAB的m文件编辑器,我需要从一行跳到另一行.如果我需要从For... 内跳end,我不能使用通常的"while"技术.
反正有没有从一条线跳到另一条线,就像goto在C?
在我的一些测试中,我需要检查列表的顺序,并执行类似这样的操作
DateTime lastDate = new DateTime(2009, 10, 1);
foreach (DueAssigmentViewModel assignment in _dueAssigments)
{
if (assignment.DueDate < lastDate)
{
Assert.Fail("Not Correctly Ordered");
}
lastDate = assignment.DueDate;
}
Run Code Online (Sandbox Code Playgroud)
我想做什么我把它变成IEnumerable上的扩展方法,使其可重用.
我的初衷是这个
public static bool IsOrderedBy<T, TestType>(this IEnumerable<T> value, TestType initalValue)
{
TestType lastValue = initalValue;
foreach (T enumerable in value)
{
if(enumerable < lastValue)
{
return false;
}
lastValue = value;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这里出现的问题是你无法与普通价值观相媲美.任何人都可以建议这样做.
干杯科林
我想在WinForm中显示手机摄像头拍摄控件的图像.我的想法是我的应用程序像摄像机程序一样工作.我想要显示图像,如果用户要拍照.
我怎样才能做到这一点?我能这样做吗?
如果您需要更多细节,请问我.
谢谢!
我有一个.NET WebBrowser控件,我用它来显示我编写的一些javascript密集的页面.页面使用YUI,并以可移植的方式构建.
我刚刚发现虽然我可以在javascript中捕获keypress,但我似乎无法在javascript中捕获keyup或keydown .这可以防止我挂钩ESC,CTRL + A,UP,RIGHT,TAB等.
我知道我可以捕获.NET中的密钥,并且其中一些存在"黑客".例如,CTRL + A的Document.ExecCommand("SelectAll",..,..).---顺便说一句,我仍然无法让SendKeys.Send("{TAB}")为标签---工作.我意识到我可以使用.NET来执行处理UP箭头的函数,但出于可移植性和最佳实践的原因,我真的不想这样做.
谁能解释为什么我无法捕获javascript中的keyup/keydown事件或建议解决方法?
谢谢!
我在某处读到?:C 中的运算符在C++中略有不同,有些源代码在两种语言中都有不同的作用.不幸的是,我找不到任何地方的文字.有谁知道这有什么区别?
任何人都可以在Mathematica 笔记本中推荐单元测试代码的模式吗?我熟悉Wolfram Workbench中的单元测试基础架构,但我也希望有一个好的方法可以在常规GUI中的简单笔记本中使用.
我一直在使用一个简单的"期望"功能,如下所示.但问题是我必须重新评估笔记本并在视觉上扫描它以查找故障.什么是创建测试列表的好方法,或者交替扫描笔记本并生成这样的列表,这样它们都可以在一次调用中进行评估?
In[8]:= Expect[ description_, val_, expr_ ] :=
If[
val == expr,
"ok",
StringJoin[ "ERROR: GOT UNEXPECTED VALUE ", ToString[expr],
" INSTEAD OF ", ToString[val] ]
]
In[9]:= Expect[ "test passes", True, True ]
Out[9]= "ok"
In[10]:= Expect[ "test fails", True, False ]
Out[10]= "ERROR: GOT UNEXPECTED VALUE False INSTEAD OF True"
Run Code Online (Sandbox Code Playgroud)