我正在使用解析器,它将通过FASTMM4内存泄漏报告并将所有相关数据存储在定制的结构/类中.我使用VirtualTreeView显示已将实例泄露为树中节点的每个类.树 - 请注意,FIRST节点显示未知.这是因为FASTMM调用方法AClass来确定它是否是一个类的天气.当它找到自定义结构时,它会将它们标记为未知,这不会使我的报表分析器非常有效,因为大多数内存泄漏来自这些自定义结构和记录.
问题:有没有办法使用DebugInfo或其他工具(如JVCL)来收集这些调试符号,并将它们的内存地址与memory-leak-report-file中的内存地址进行比较?我希望我的树停止显示UNKNOWN并显示这些自定义结构的名称.我是Delphi编程的新手,甚至更新解决内存泄漏问题,所以任何帮助都意味着很多!
我很难按照文档页面上的说明操作.我有一个表格,显示一列中的平均持续时间,采用HH:MM格式,例如10:45表示十小时四十五分钟.我希望能够按照此列中的值对整个表进行排序.
这是我的初始化代码:
var aoTable = $("#TableStatistic").dataTable({
"bDestroy": true,
"sDom": "<'row-fluid dt-header'<'span6'f><'span6'T>>t<'row-fluid dt-footer'<'span6'i><'span6'p>>",
"oTableTools": {
"aButtons": ["xls", "pdf", "print"],
"sSwfPath": "../Content/media/swf/copy_csv_xls_pdf.swf"
},
"aaData": statisticsModel.byCategoriesList(),
"aaSorting": [[0, "desc"]],
"bPaginate": false,
"aoColumns": [
{ "mDataProp": "CategoryName", "sTitle": "Reports.CategoryName" },
{ "mDataProp": "AverageTime", "sTitle": "Reports.AverageTime", "sSortDataType": "duration-desc"},
{ "mDataProp": "NumberOfProblemsSolved", "sTitle": "Reports.NumberOfProblemsSolved" }
],
"oLanguage": MeridianTranslation.DataTable
});
Run Code Online (Sandbox Code Playgroud)
以下是我认为在我的表中添加新的排序函数和新的sSortType的正确方法:
jQuery.extend(jQuery.fn.dataTableExt.oSort['duration-desc'] = function (x, y) {
var xHours = parseInt(x.slice(0, x.indexOf(':')));
var xMinutes = parseInt(x.slice(x.indexOf(':') + 1, x.length)) + xHours …Run Code Online (Sandbox Code Playgroud) 我使用TObjectList(Delphi 2007)存储大量数据 - 我希望有大约30万个元素甚至更多.但是,当创建列表时,它的默认大小设置为仅存储四个元素,如果一个尝试添加第五个元素则为8,如果一个尝试添加第九个元素则为16,依此类推.数字可能已关闭,但我认为工作正确.这样做的问题是必须将所有元素从内存的释放部分复制到新扩展列表迁移的新内存块.我想设置一个特定的初始大小并释放(或撤消内存的保留,因为保留和分配不是相同的事情)列表已分配/保留的任何未使用的空间.这可能不是很多代码,但我认为应该以问答形式对这个问题进行永久,可靠的引用.
如果可能的话,我希望我的Delphi项目在程序运行时生成一个FASTMM内存泄漏报告,并在关闭时附加到该报告,而不必在每次关闭程序时都看到此对话框.
如果在运行期间无法使FMM创建报告并编辑N次,我至少会想要摆脱烦人的对话框,因为我已经有了比对话框显示更详细的报告.
我认为C++支持以下内容:
Object objects[100];
Run Code Online (Sandbox Code Playgroud)
这会实例化100个对象,对吧?是否有可能在Delphi(特别是2007年)中做到这一点?除了以下之外的东西:
for i:=0 to 99 do
currentObject = TObject.Create;
Run Code Online (Sandbox Code Playgroud)
或者使用Allocate函数,传递的大小值是大小的一百倍TObject,因为它只是分配内存,它实际上并没有划分内存并将它"赋予"对象.如果我假设c ++实例化是即时的而不是根据引擎迭代,我道歉.
我有一个在节点树中排序节点的过程(VirtualTreeView)从FMM4报告中提取的所有内存泄漏都存储在类TMemoryLeakList的对象中(这些是我想要排序的列表),它们存储在列表列表中称为TGroupedMemoryLeakList,TMLL和TGMLL都扩展了TObjectList.如果我想保持能够在升序和降序排序之间进行选择并在四种不同数据类型之一之间进行选择的功能,我必须'实现八种不同的比较方法(4种排序类型*2种排序方向)我转到主排序方法,因为我的TMLL列表扩展了TObjectList.主要的排序方法看起来像这样.
从GUI组合框中获取字段fSortType和fSortDirection的值.这八个通用比较函数中的一个看起来像这样.剩下的七个是这一个的复制/粘贴变体.
是否有任何合理的方法来重构大量的复制粘贴代码并仍保留选择特定排序类型和方向的功能?
FastMM报告此行是内存泄漏的来源:
StrClassName := MidStr (curLine, length(START_OF_CLASSNAME)+1, length(curline)+1)
Run Code Online (Sandbox Code Playgroud)
这是怎么回事与Copy和MidStr?这只是一个Delphi 2007编译器的bug,还是以后的版本也有这个问题?这里是链接到FastMM报告的副本,以及像我的应用程序是如何显示这些类型的报告.看,为了显示VirtualTreeView我需要新数据类型的节点.我称之为TMemoryLeak.当我解析报告时,我给出了TMemoryLeak一个类名,callstack,它的大小等等.但是当应用程序关闭,FastMM启动时,上面的复制行似乎泄漏了内存.我释放callstack的大小,整个对象,但ClassName字段是一个字符串总是韭菜内存.
更新(来自评论)
这是声明和构造函数以及解构器.至于生命周期 - 一旦对象用于显示节点树,就会调用对象的解构器,之后它们就会被淘汰,并且被释放(我希望).
TMemoryLeak = class(TObject)
private
fID :integer;
fSize :integer;
fTotalSize :integer;
fCallStack :TStringList;
fClassName :string;
fRepeatedInstance:integer;
public
property ID :integer read fID write fID;
property TotalSize :Integer read fTotalSize write fTotalSize;
property Size :integer read fSize write fSize;
property CallStack :TStringList read fCallStack write fCallStack;
property ClassName :string read fClassName write fClassName;
property RepeatedInstance :integer read …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个bitbucket存储库并开始使用本教程:https: //confluence.atlassian.com/display/BITBUCKET/Clone+Your+Git+Repo+++Add+Source+Files
一切顺利,直到我克隆了空的存储库,创建了一个名为bb101repo的文件夹,就像教程要求的那样.然后,本教程继续解释该文件夹的名称不够精确以及我们应该如何使用不同的名称创建一个新文件夹.
因此,当我尝试使用命令rm -irf"bb101repo /"删除文件夹时,终端显示以下消息:"rm:无法删除目录'bb101repo':权限被拒绝.
有办法去sudo吗?
我有一段代码:
setEnableControls(false);
lblLoading.Caption:='Loading tree contents, please wait.';
someBigLoading();
setEnableControls(true);
lblLoading.Caption:='';
Run Code Online (Sandbox Code Playgroud)
问题是,标签的标题文本在"大加载"完成之后才会刷新.有没有办法让程序在消息队列中处理消息,然后进入下一个命令?
当我将DLL复制到.exe所在的同一文件夹时,它可以工作.但是有一种(某种)解决方法:当我打开调试器选项并将DLL的原始路径添加到环境块时,它在我的IDE中启动项目时起作用,但是当它运行时它不起作用我在资源管理器中启动project.exe文件.这不是一个真正的问题,我只想知道这些文件之间的关系.
我在一个应用程序中使用jQuery datepicker,除其他外,它将用于插入和更新员工的出生日期.我觉得必须多次点击才能进入70年代和80年代,很多员工都出生在这几十年里很麻烦.有没有办法以更少的点击次数访问这些"更多"年份?这就是我的日期选择器的样子
$("#DateOpened").datepicker({
dateFormat: "mm/dd/yy",
maxDate: "+0D",
showAnim: 'slide',
changeMonth: true,
changeYear: true,
'setDate': new Date(),
onClose: function (selectedDate) {
$("#DateClosed").datepicker("option", "minDate", selectedDate);
}
});
Run Code Online (Sandbox Code Playgroud) delphi ×9
fastmm ×3
sorting ×3
memory-leaks ×2
admin ×1
bitbucket ×1
datatables ×1
debugging ×1
delphi-2007 ×1
dll ×1
git-bash ×1
jquery ×1
jquery-ui ×1
refactoring ×1
tobjectlist ×1